处理自托管WCF / MSMQ中的中毒队列消息

时间:2015-04-15 15:06:49

标签: .net wcf msmq poison-queue

我正在尝试设置WCF服务来处理毒药队列消息,而我正在努力这样做。我将WCF服务配置为:

<endpoint address="net.msmq://serverip/private/services/eventservice.svc;poison"
    binding="netMsmqBinding" 
    bindingConfiguration="MsmqBindingTransactionalSecurityPoisonHandling"   
    contract="App.IEventService" />

我的绑定配置是:

<binding name="MsmqBindingTransactionalSecurityPoisonHandling" exactlyOnce="true" durable="true">
        <security mode="None" />
</binding>

但是,我收到此错误:

  

无法检测队列是否为事务性。

  

转换&#39; serverip \ private $ \ services / eventservice.svc; poison&#39;时发生错误队列路径名称为格式名称:指定的队列路径名称无效。 (-1072824300,0xc00e0014)。排队通道上的所有操作都失败了。确保队列地址有效。必须在启用Active Directory集成的情况下安装MSMQ,并且可以访问它。

队列路径名有效,启用了Active Directory集成的MSMQ,所以我不明白错误发生的原因???

编辑:我的毒物队列处理服务的定义如下:

<ServiceBehavior(AddressFilterMode:=AddressFilterMode.Any, InstanceContextMode:=InstanceContextMode.Single, ConcurrencyMode:=ConcurrencyMode.Single)>
Public Class EventService
    Implements IEventService

    <OperationBehavior(TransactionScopeRequired:=True, TransactionAutoComplete:=True)>
    Public Sub ProcessEvent(msg As EventMessage) Implements IEventService.ProcessEvent

    End Sub
End Class

1 个答案:

答案 0 :(得分:1)

好的,如果我理解的话,你原来的netMsmq毒药队列地址会以某种方式被“翻译”到字符串中,然后无法解析为格式名称(根据错误信息)。

我可以问你是否使用交易队列?诚实的问题,但您已在绑定配置中指定了事务语义,这也必须与服务操作实现中的相应OperationBehaviorAttribute相结合,当然还有事务队列。

此外,您是否在服务实现上实现了AddressFilterMode?对于有害消息处理,应将其设置为“Any”,并且我认为对队列地址解析有影响,并且对于有害消息处理程序是必需的。

[ServiceBehavior(AddressFilterMode = AddressFilterMode.Any)]
public MyPoisonHanderImplementation : IMyPoisonHandler
{...}

另外,当你只使用私有队列时,我有点困惑为什么你需要启用AD集成?或者这是另一个原因的要求吗?