【问题标题】:How do I use MsmqIntegrationBinding with a non-transactional queue?如何将 MsmqIntegrationBinding 与非事务性队列一起使用?
【发布时间】:2010-12-13 02:06:30
【问题描述】:

这是我的服务合同:

<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。" Source="System.ServiceModel"

这对我来说没有意义,因为如您所见,TransactionAutoComplete 未设置为 true。

【问题讨论】:

    标签: wcf msmq msmqintegrationbinding


    【解决方案1】:

    TransactionAutoComplete 的默认值为 true。这让我想知道你是否必须用这个属性而不是你的类来装饰你的合同?

    【讨论】:

    • 不,这不是合同级别的属性。它是在实现中正确指定的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-28
    • 2023-01-04
    • 2010-12-08
    • 1970-01-01
    • 2011-08-20
    相关资源
    最近更新 更多