Как мне использовать MsmqIntegrationBinding с нетранзакционной очередью?

Это мой сервисный контракт:

<ServiceContract> _
<ServiceKnownType(GetType(String))> _
Public Interface ISecurityMasterChanged

<OperationContract(IsOneWay:=True, Action:="*")> _
Sub ValidateCusipInMessage(ByVal message As MsmqMessage(Of String))

End Interface

Это мой класс

Public Class SecurityValidator
    Implements ISecurityMasterChanged

<OperationBehavior(TransactionAutoComplete:=False, TransactionScopeRequired:=False)> _
<ServiceKnownType(GetType(String))> _
Public Sub ValidateCusipInMessage(ByVal message As MsmqIntegration.MsmqMessage(Of String)) Implements ISecurityMasterChanged.ValidateCusipInMessage
'...
End Sub

Когда я пытаюсь открыть порт с этим кодом, я получаю сообщение об ошибке

    m_ServiceHostQueue = New ServiceHost(Me)
    m_ServiceHostQueue.AddServiceEndpoint(GetType(ISecurityMasterChanged), New MsmqIntegrationBinding With {.ExactlyOnce = False}, m_Config("SMChanged Queue").ToString)
    m_ServiceHostQueue.Open()

System.InvalidOperationException произошла Message="Операция 'ValidateCusipInMessage' по контракту 'ISecurityMasterChanged' настроена с TransactionAutoComplete, установленным в true, и с TransactionScopeRequired, установленным в false. TransactionAutoComplete требует, чтобы TransactionScopeRequired был установлен в true." Источник ="System.ServiceModel"

Это не имеет смысла для меня, потому что, как вы можете видеть, TransactionAutoComplete не имеет значение true.

1 ответ

По умолчанию для TransactionAutoComplete установлено значение true. Что заставляет меня задуматься, нужно ли вам украшать свой контракт этим атрибутом вместо своего класса?

Другие вопросы по тегам