Как мне использовать 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. Что заставляет меня задуматься, нужно ли вам украшать свой контракт этим атрибутом вместо своего класса?