0

これは私のサービス契約です:

<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="コントラクト 'ISecurityMasterChanged' の操作 'ValidateCusipInMessage' は、TransactionAutoComplete が true に設定され、TransactionScopeRequired が false に設定されて構成されています。TransactionAutoComplete では、TransactionScopeRequired が true に設定されている必要があります。" ソース="System.ServiceModel"

ご覧のとおり、TransactionAutoComplete が true に設定されていないため、これは私には意味がありません。

4

1 に答える 1

0

TransactionAutoComplete のデフォルトは true です。クラスの代わりにこの属性でコントラクトを装飾する必要があるのだろうか?

于 2010-07-20T13:15:10.593 に答える