我有一个wcf服务,我在Windows 2003服务器上的一个Windows服务中托管,该服务正在侦听MSMQ队列。我在netmsmqbinding上设置了ReceiveRetryCount = 2。该服务设置为使用事务([OperationBehavior(TransactionScopeRequired = true,TransactionAutoComplete = true)])。这项服务运作良好。
由于数据库调用无法支持MSDTC,我需要关闭事务。所以我将服务属性切换到
[OperationBehavior(TransactionScopeRequired = false)]
现在,当抛出异常或错误时,不会发生重试,该服务的错误处理程序永远不会触发。原始消息最终在系统DLQ中。我希望故障处理程序在两次重试后处理故障。有什么想法吗?
答案 0 :(得分:2)
将事情改回原来的状态。
在数据库调用周围,添加以下内容(代码是从内存中完成的 - 让我知道是否需要解决这个问题):
// using System.Transactions;
using( var ts = new TransactionScope( TransactionScopeOption.Suppress ) )
{
// Call DB stuff
ts.Complete();
}