我有一个通过 netMsmqBinding (MSMQ3) 的 WCF 服务。服务代码不会在 WCF 事务控制下运行,因为服务中的某些操作没有事务能力并且无法回滚。据我了解,这意味着我没有得到任何有毒消息处理等的好处。所以一旦我的服务代码被调用,消息就永远不在队列中。
如果我的服务出现严重故障,我想防止进一步的消息丢失。所以我记录了刚刚失败的消息,然后引发了一个普通的异常(不是 FaultException)。与任何其他 WCF 服务绑定一样,我希望这会使通道(在本例中为 MSMQ 通道调度程序)发生故障,并且不会从队列中接收更多消息。
但我似乎无法让这种行为(没有双关语)起作用。无论我的服务代码是否引发异常,我都会继续将消息路由到服务。
我在这里错过了什么吗?netMsmqBinding 是否像 http 绑定一样为每个请求创建一个新通道?如果是这样,那么任何关于如何解决我的问题的想法将不胜感激。