【问题标题】:Handling Poisoned Queue Messages in Self-Hosted WCF/MSMQ在自承载 WCF/MSMQ 中处理中毒队列消息
【发布时间】:2015-06-21 15:08:08
【问题描述】:

我正在尝试设置 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>

但是,我收到了这个错误:

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

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

队列路径名有效,并且启用了与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

【问题讨论】:

  • 根据错误消息,您的队列路径中混合了正斜杠和反斜杠。这是笔误吗?
  • MSMQ 上的 WCF 仅使用正斜杠;它被翻译了。例如,我成功地通过 net.msmq://serverip/private/services/eventservice.svc 为连接到主队列的服务发出请求。这只是我不知道的毒子队列连接。

标签: .net wcf msmq poison-queue


【解决方案1】:

好吧,如果我理解的话,您原来的 netMsmq 毒物队列地址不知何故被“翻译”成字符串,然后无法解析为格式名称(根据错误消息)。

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

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

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

另外,我有点困惑,为什么在您只使用私有队列时需要启用 AD 集成?或者这是出于其他原因的要求?

【讨论】:

  • 我正在使用事务队列;我在上面包含了我的服务实现的外壳。谢谢。
  • @BrianMains - 那我就难住了 - 道歉没有更多帮助。仍然不确定为什么需要 AD 集成?
  • 是的,这很奇怪,但至少你审查过我的方法应该没有问题,所以我必须做一些额外的验证。谢谢。
猜你喜欢
  • 2010-12-26
  • 2017-11-11
  • 1970-01-01
  • 2013-07-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-09
  • 1970-01-01
相关资源
最近更新 更多