3

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

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

4

2 回答 2

2

如果您可以避免在每次调用之前重新创建客户端代理,那肯定对您的性能有益。

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

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

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

于 2010-01-06T05:56:18.273 回答
1

不建议让通道保持打开状态,而是让 WCF 决定何时物理关闭\打开通道。您可以通过一遍又一遍地使用相同的客户端对象来节省一些资源,只需确保没有 2 个线程同时使用它(以防可以同时按下 2 个按钮或一个接一个地按下)。

于 2010-01-09T02:37:39.470 回答