生成wcf代理与ChannelFactory

Ars*_*yan 5 c# wcf proxy

使用wcf服务这两种方式中的哪一种更好?为什么?

  1. 从服务引用生成代理
  2. 使用ChannelFactory

恩.

ChannelFactory<IMyContract> factory = new ChannelFactory<IMyContract>();
IMyContract proxy1 = factory.CreateChannel();
proxy1.MyMethod();
Run Code Online (Sandbox Code Playgroud)

这样调用wcf服务有点无聊

IMyContract proxy1 = null; 
try
{
    proxy1 = factory.CreateChannel();
    proxy1.MyMethod();
    ((ICommunicationObject)proxy1).Close();
}
catch
{
   ((ICommunicationObject)proxy1).Abort();
}
Run Code Online (Sandbox Code Playgroud)

我们是否应该为每个代理呼叫重复此片段?或者是否有通用的方法来创建一个用于关闭和中止代理的包装类?

写这样的类ServiceExecution.Execute(proxy=>proxy.MyMethod());创建代理,并关闭或中止它这样做的好方法?

Ars*_*yan 3

是一篇 MSDN 帖子,建议不要在 .Net 3 中使用生成的代理,因为它每次都会创建 ChanelFactory,.Net 3.5 ChanelFactory 会被缓存。

但我个人更喜欢自己使用ChanelFactory,生成的代码即使partials出来也总是很痛苦