何时关闭WCF客户端?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (55)

我已经将WCF服务的客户端代理实例放入App类的一个属性中,以便我可以从应用程序的任何位置获取它。

我没有关闭客户端,我在应用程序期间将其打开。这样做的主要原因是,如果我要遵循WCF服务mex页面中的// Comment(如果您将浏览器指向WCF服务url),//它会说//始终关闭客户端。client.Close();

这很好,除非我在调用client.SomeAsync()方法之后立即调用client.Close(),然后在结果返回之前它将被关闭。我应该把close放进Completed()方法吗?或者我应该忘记关闭它,因为一旦它关闭,我必须创建一个客户端代理的新实例(如果是这种情况,可能不会将其存储在App.property中。

提问于
用户回答回答于

应该按照建议关闭它。是的,如果你使用的是异步方法,那么只有在调用完成后你才能关闭它。

创建(打开)和关闭客户端是WCF客户端的常态。对于持续创建和关闭新客户端来说,没有明显的性能损失。

用户回答回答于

显式关闭它最好在Completed方法的finally {}中完成。无论什么原因,如果客户端保持连接状态,将开始阻止其他客户端呼叫 根据HTTP RFC:

1999年定义(RFC 2616)“使用持久连接的客户端应该限制它们维护给定服务器的同时连接的数量。单用户客户端不应与任何服务器或代理保持2个以上的连接。代理应该使用最多2 * N个连接到另一台服务器或代理,其中N是同时活动用户的数量。这些准则旨在改善HTTP响应时间并避免拥塞。“由于开发人员使用AJAX或类似AJAX的请求来更新网页,所以http限制的讨论越来越多。

如果没有关闭连接,则有负载,很可能会开始阻止。我当然认为这是HttpBinding。

扫码关注云+社区