首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用netMsmqBinding为WCF通道设置故障

使用netMsmqBinding为WCF通道设置故障
EN

Stack Overflow用户
提问于 2012-05-25 00:27:03
回答 1查看 302关注 0票数 0

我有一个基于netMsmqBinding的WCF服务(MSMQ3)。服务代码不在WCF事务控制下运行,因为服务中的某些操作不具有事务功能,也不能回滚。据我所知,这意味着我没有获得有害消息处理等的任何好处。因此,一旦我的服务代码被调用,消息就永远不会出现在队列中。

在我的服务出现严重故障的情况下,我希望防止进一步的消息丢失。因此,我记录了刚刚失败的消息,然后引发了一个简单的异常(而不是FaultException)。与任何其他WCF服务绑定一样,我预计这会使通道(在本例中为MSMQ通道分派器)出错,并且不会从队列接收进一步的消息。

但我似乎不能让这种行为(没有双关语)起作用。不管我的服务代码是否抛出异常,我都会继续将消息路由到服务。

我是不是漏掉了什么?netMsmqBinding是否像http绑定一样,为每个请求创建一个新通道?如果是这样,那么任何关于如何解决我的问题的想法都将不胜感激。

EN

回答 1

Stack Overflow用户

发布于 2012-08-28 04:04:49

服务代码不在WCF控制下运行,因为服务中的某些操作没有事务性功能,也不能回滚。据我所知,这意味着我没有从有害消息处理等方面获得任何好处。

事务控制在某种程度上取决于您。在你想成为事务性的代码周围包装一个TransactionScope。这样就保证了它是事务性的。如果实现自定义代码,则这是队列上的属性。或者,您可以按每个队列单独启用MSMQ上的事务。

有毒队列不是自动的,实际上是一个完全独立的队列。当您检测到无效的消息并写入时,您将写入它。

,所以我记录了刚刚失败的消息,然后引发一个简单的异常(而不是FaultException)。

从MSMQ接收时引发异常不起作用。它没有什么可以抛出异常的。这就是有毒队列发挥作用的地方。您向有毒队列写入,以指示发生了错误。

我是不是漏掉了什么?netMsmqBinding是否像http绑定一样,为每个请求创建一个新通道?

netMsmqBinding会为在服务器端读取的每条消息生成一个新线程,但写入MSMQ不会。每个通道生成一个单独的线程。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10741549

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档