2010-01-06 59 views
3

也许这是一个明显的问题,也许它不是。设想一个GUI控制应用程序,其中每个按钮推送都会在远程WCF服务上调用不同的功能。大约每隔几秒钟就会频繁使用按钮。一般情况下,最好是在每次函数调用时打开和关闭WCF通道,或者在应用程序的整个生命周期中保持通道打开状态?当然假设这个应用程序只有几个实例。重复调用WCF通道寿命

注意:这个问题不是真的关于这个例子,而是帮助我在这里找到最佳实践。

回答

1

建议不要打开通道,而是让WCF决定何时关闭\打开通道。您可以通过反复使用相同的客户端对象来保存一些资源,只要确保没有两个线程同时使用它(例如,可以一次按下一个按钮或一个按下一个按钮)。

2

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

但是:这样做,你必须确保在服务器端的所有异常(也许通过实现对您的服务IErrorHandler接口)妥善处理,变成了SOAP错误,可以转移回客户端没有错误的频道。

如果单个异常转义您,并作为“常规”.NET异常返回给客户端,则通道(您的客户端和服务器之间的通信链接)将为故障 - >即呈现无用。

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