我听说,即使在以下情况下,也必须处置(或关闭)WCF客户端代理。

  • 您没有使用 session
  • 没有需要确定性清理(例如打开套接字)的非托管资源

  • 例如,当使用具有默认绑定(bind)配置的BasicHttpBinding时,即使在流行的网页中也可以,对吗?
    var clt = new MyServiceClient();
    clt.PlaceOrder(foo);
    // no dispose
    

    或者
    var clt = new ChannelFactory<IOrderService>().CreateChannel();
    clt.PlaceOrder(foo);
    

    谢谢

    最佳答案

    创建ChannelFactory并打开它是一项昂贵的操作,如果您担心性能,则应避免在每次调用时都这样做。

    即使使用basicHttpBinding,第一个用例也不对,因为它可能会为每个实例创建一个新的channelfactory。 .NET 3.5 SP1引入了一些ChannelFactory缓存,因此在某些情况下可能还可以。

    在您的第二个用例中,如果您缓存并重用channelfactory,则部署并不是真正必要的,但请记住,您/您的部署人员可以更改绑定(bind)@部署时间,并且缺少关闭/部署可能会产生巨大的影响。

    总之,关闭/处置始终是安全的,这就是MSDN建议这样做的原因。

    关于c# - 处置/关闭WCF客户端代理为何很重要,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7184509/

    10-13 03:18