如何动态设置 WCF 服务的事务超时
本文关键字:服务 WCF 事务 超时 设置 何动态 动态 | 更新日期: 2023-09-27 18:32:39
我要求能够动态设置通过 MSMQ 运行的 WCF 服务的事务超时。我正在遵循MSDN上的示例:http://msdn.microsoft.com/en-us/library/system.servicemodel.dispatcher.channeldispatcher.transactiontimeout.aspx。但是,我设置的超时似乎不起作用。
我用来设置 TransactionTimeout 属性的代码如下:
ServiceProperties properties = ...; // has a TransactionTimeout value for the service
var serviceHost = new ServiceHost(...);
serviceHost.Open();
var channelDispatchers =
serviceHost.ChannelDispatchers.Select(
cd => new ChannelDispatcher(cd.Listener)).ToArray();
foreach (var channelDispatcher in channelDispatchers)
{
channelDispatcher.TransactionTimeout = properties.TransactionTimeout;
}
当我运行服务并在服务实现中放置 2 分钟延迟时,当我尝试写入另一个 MSMQ 队列时收到事务登记错误:
异常:发送到队列时出错: 无法登记指定的事务。(-1072824232, 0xc00e0058(。确保 MSMQ 已安装并正在运行。如果你是 发送到本地队列,确保队列存在所需的 访问模式和授权。
过去有没有人能够让它工作?任何想法将不胜感激。
提前谢谢你。
我想出了正确的方法。执行此操作的正确方法是查找并修改附加到服务说明的 ServiceBehaviorAttribute 对象:
var transactionTimeout = TimeSpan.FromSeconds(...);
var behavior = serviceHost.Description.Behaviors.Find<ServiceBehaviorAttribute>();
behavior.TransactionTimeout = transactionTimeout.ToString();
serviceHost.Open();