重复调用的 WCF 通道生命周期
Posted
技术标签:
【中文标题】重复调用的 WCF 通道生命周期【英文标题】:WCF channel lifetime with repeat calls 【发布时间】:2011-01-01 22:20:42 【问题描述】:也许这是一个显而易见的问题,也许不是。想象一个 GUI 控制应用程序,其中每个按钮按下都会调用远程 WCF 服务上的不同函数。大约每隔几秒钟就会频繁使用按钮。一般来说,最好在每次函数调用时打开和关闭 WCF 通道,还是在应用程序的生命周期内保持通道打开?当然,假设这个应用程序只有几个实例化。
注意。这个问题并不是关于示例,而是帮助我了解这里的最佳实践。
【问题讨论】:
【参考方案1】:如果您可以避免在每次调用之前重新创建客户端代理,那肯定会提高您的性能。
但是:这样做,您必须确保服务器端的所有异常都得到正确处理(可能通过在您的服务上实现IErrorHandler
接口)并转化为 SOAP 错误,这可以在不导致通道故障的情况下传输回客户端。
如果单个异常逃脱了您,并作为“常规” .NET 异常发送回客户端,则通道(您的客户端和服务器之间的通信链接)将出现故障 - -> 即变得无用。
在这种情况下,您需要首先检查该状态(通道具有.State
属性),如果遇到故障通道,您只能在调用之前再次重新创建客户端代理方法。
【讨论】:
【参考方案2】:不建议让通道保持打开状态,而是让 WCF 决定何时物理关闭\打开通道。您可以通过反复使用相同的客户端对象来节省一些资源,只需确保没有 2 个线程同时使用它(以防两个按钮可以同时按下或一个接一个地按下)。
【讨论】:
以上是关于重复调用的 WCF 通道生命周期的主要内容,如果未能解决你的问题,请参考以下文章