在WCF频道上呼叫Dispose()
有时会阻止一分钟,直到TimeoutException
被引发。如果服务器已经从它的末端拆除了通道,这似乎是正常的。
由于我们正试图处理该频道,并且通常在频道已从另一端拆除时发生这种情况,是否可以减少用于Dispose()
的超时时间呼叫?
答案 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实现中无效。