重复呼叫的WCF信道生命周期

时间:2010-01-06 04:39:59

标签: c# wcf channel lifetime

也许这是一个显而易见的问题,也许不是。想象一下GUI控制应用程序,其中每个按钮推送调用远程WCF服务上的不同功能。按钮使用频率大约每隔几秒钟。通常,最好是在每个函数调用时打开和关闭WCF通道,还是在应用程序的生命周期内保持通道打开?当然假设这个应用程序只有少数实例化。

NB。这个问题并不是关于这个例子,而是帮助我了解这里的最佳实践。

2 个答案:

答案 0 :(得分:2)

如果您不必在每次通话之前重新创建客户端代理,那肯定会对您的表现有所帮助。

但是:这样做,您必须确保正确处理服务器端的所有异常(可能通过在您的服务上实现IErrorHandler接口)并转为SOAP故障,这可以转移回客户端而不会导致频道错误。

如果单个异常逃脱,并作为“常规”.NET异常发送回客户端,则通道(客户端与服务器之间的通信链接)将出错 - - >即无用的。

在这种情况下,您需要首先检查该状态(通道具有.State属性),如果遇到故障通道,除了重新创建客户端代理之外,您无能为力在调用方法之前。

答案 1 :(得分:1)

建议不要让频道保持打开状态,而是让WCF决定何时关闭\开放频道。您可以反复使用相同的客户端对象来保存一些资源,只需确保没有2个线程同时使用它(如果一次按下2个按钮或者一个接一个地按下一个按钮)。