繁体   English   中英

如何动态设置WCF服务的TransactionTimeout?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM