减少WCF频道处理呼叫的超时时间?

时间:2014-02-12 23:53:48

标签: c# wcf

在WCF频道上呼叫Dispose()有时会阻止一分钟,直到TimeoutException被引发。如果服务器已经从它的末端拆除了通道,这似乎是正常的。

由于我们正试图处理该频道,并且通常在频道已从另一端拆除时发生这种情况,是否可以减少用于Dispose()的超时时间呼叫?

1 个答案:

答案 0 :(得分:0)

  

在WCF频道上调用Dispose()有时会阻止一分钟   直到引发TimeoutException。这似乎是一般的,如果   服务器已经从它的终端拆除了通道。

并非总是如此。取决于你的绑定和在您的频道管理中,在服务处理完操作之前,您无法关闭/处置频道。

有一篇珍贵的文章here解释了为什么单向调用并不总是单向的,也就是说为什么关闭频道会阻止。这可以帮助您选择其他绑定配置。

  

因为我们正试图处理这个频道并且通常会这样做   当通道已经从另一个通道拆除时发生   结束,是否有可能减少用于的时间   Dispose()调用?

这可以通过客户端配置文件中的客户端超时设置进行管理。有四种设置(打开,发送,接收和关闭)。这取决于你的绑定,但通常是这样的(这里一分钟):

<binding openTimeout="00:01:00" 
             closeTimeout="00:01:00" 
             sendTimeout="00:01:00" 
             receiveTimeout="00:01:00">
</binding> 

以下是交易:当请求处理在服务上花费1分30秒时,WCF客户端在此持续时间之后抛出TimeoutExceptions。

调用Dispose或Close几乎相同,并会尝试关闭频道。您必须非常了解Dispose / Close问题:关闭通道可能会抛出异常,导致通道保持打开状态。请继续阅读以避免此here

我也很好奇为什么在你的上下文中调用Dispose需要60秒。这表明某些内容在您的WCF实现中无效。