何时关闭WCF客户端?

时间:2009-04-27 03:24:20

标签: c# wcf silverlight

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

我没有关闭客户端,我在应用程序期间将其保持打开状态。这样做的主要原因是,如果我在WCF服务mex页面(如果你将浏览器指向WCF服务网址时得到的那个)中按//注释,则表示//始终关闭客户端。 client.Close();

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

感谢, 斯蒂芬

2 个答案:

答案 0 :(得分:12)

你应该按照建议关闭它。是的,如果您使用的是异步方法,则必须在调用完成后才关闭它。

创建(打开)和关闭客户端是WCF客户端的标准。持续创建和关闭新客户端没有明显的性能损失。

答案 1 :(得分:1)

最好在您的Completed方法的finally {}中明确地关闭它。无论出于何种原因如果客户端保持连接,您将开始阻止其他客户端呼叫。根据HTTP RFC:

  

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

如果您没有关闭连接,那么您很可能会开始阻止。我当然假设这是HttpBinding。