.net 在自托管WCF/MSMQ中处理中毒队列消息
我正在尝试设置一个WCF服务来处理有毒队列消息,但我很难做到这一点。我将WCF服务配置为:.net 在自托管WCF/MSMQ中处理中毒队列消息,.net,wcf,msmq,poison-queue,.net,Wcf,Msmq,Poison Queue,我正在尝试设置一个WCF服务来处理有毒队列消息,但我很难做到这一点。我将WCF服务配置为: <endpoint address="net.msmq://serverip/private/services/eventservice.svc;poison" binding="netMsmqBinding" bindingConfiguration="MsmqBindingTransactionalSecurityPoisonHandling" contract=
<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;将“毒药”队列路径名称改为格式名称:指定的队列路径名称无效。(-1072824300,0xc00e0014)。排队通道上的所有操作均失败。请确保队列地址有效。安装MSMQ时必须启用Active Directory集成,并且可以访问它
队列路径名有效,并且启用了MSMQ与Active Directory集成,因此我不明白为什么会发生此错误
编辑:我的有毒队列处理服务的定义如下:
<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
公共类事件服务
实现IEventService
Public Sub-ProcessEvent(消息作为EventMessage)实现IEventService.ProcessEvent
端接头
末级
好的,如果我理解的话,您的原始netMsmq毒药队列地址正在以某种方式“翻译”为字符串,然后无法解析为格式名称(根据错误消息)
我可以问一下您是否正在使用事务队列吗?诚实的问题,但您已经在绑定配置中指定了事务语义,它还必须与服务操作实现中适当的OperationBehaviorAttribute相结合,当然还有事务队列
此外,您是否在服务实现上实现了AddressFilterMode?对于毒药消息处理,这应该设置为“Any”,我相信这会影响队列地址解析,并且毒药消息处理程序需要这样做
[ServiceBehavior(AddressFilterMode = AddressFilterMode.Any)]
public MyPoisonHanderImplementation : IMyPoisonHandler
{...}
另外,我有点困惑,当您只使用私有队列时,为什么需要启用广告集成?或者这是另一个原因导致的要求?根据错误消息,队列路径中混合了正向斜杠和反向斜杠。这是打字错误吗?MSMQ上的WCF只使用正斜杠;它被翻译了。例如,我正在成功地请求通过:net连接到主队列的服务。msmq://serverip/private/services/eventservice.svc. 这只是我不知道的有毒子队列连接;我在上面包含了我的服务实现的shell。谢谢。@BrianMains——那我就难堪了——道歉真是帮不上忙。仍然不确定为什么需要广告整合?是的,这很奇怪,但至少你审查过我的方法应该没有问题,所以我必须在我这方面做一些额外的验证。谢谢