【问题标题】:One Way WCF Contract, MSMQ and Throwing Exceptions一种方式 WCF 合同、MSMQ 和抛出异常
【发布时间】:2014-07-18 23:58:50
【问题描述】:

我创建了一个针对 MSMQ 的 WCF 服务合同。既然是MSMQ,我就用单向通信:

[OperationContract(IsOneWay = true)]

在我的服务实现中,我有 OperationBehavior 自动提交事务:

[OperationBehavior(TransactionAutoComplete = true, TransactionScopeRequired = true)]

这确保 WCF 通过将消息放入重试队列(根据我的配置)来处理任何异常。从单向操作中抛出异常似乎很奇怪。这是告诉 WCF 不要提交事务的正确方法吗?

【问题讨论】:

  • 问题有点含糊?您的意思是,您在调用服务的客户端中遇到异常,或者您只是在此服务方法中看到异常?
  • 我认为您的问题可能是 TransactionScopeRequired。检查msdn.microsoft.com/en-us/library/…
  • 我只是问在使用 MSMQ 时抛出异常是否是在 WCF 中回滚事务的正确方法。

标签: wcf exception-handling message-queue msmq


【解决方案1】:

经过一番研究,我发现抛出异常是唯一告诉WCF使用内置重试子队列的方法。这个异常被 WCF 吞没了。它还用于确保交易不会自动完成。

【讨论】:

  • 通过开始处理,我能够让事务进入重试子队列:Transaction qTransaction = Transaction.Current;并以:qTransaction.Rollback() 结尾;当我想回滚时。不调用 Rollback 并允许 OperationContract 运行到处理结束将提交事务并将其从主队列中删除。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-01-24
  • 2011-07-17
  • 1970-01-01
  • 1970-01-01
  • 2011-08-29
  • 1970-01-01
  • 2013-07-02
相关资源
最近更新 更多