![](/img/trans.png)
[英]How can I set a WCF service base address port number dynamically in app.config?
[英]How can I dynamically set the TransactionTimeout for a WCF service?
我要求能够为通过MSMQ运行的WCF服务动态设置事务超时。 我正在遵循MSDN上的示例: http : //msdn.microsoft.com/zh-cn/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();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.