我听说,即使在以下情况下,也必须处置(或关闭)WCF客户端代理。
例如,当使用具有默认绑定(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/