使用WebChannelFactory创建后处置客户端

时间:2011-04-21 16:27:40

标签: c# wcf dispose webchannelfactory

在我目前的生产代码中,根据documentation on msdn,创建客户端的方法是

using (WebChannelFactory<IServiceInterface> cf
      = new WebChannelFactory<IServiceInterface>("http://service.url"))
{
    IServiceInterface client = cf.CreateChannel();
    client.CallTheMethod();
}

鉴于我有这个界面:

public interface IServiceInterface
{
    void CallTheMethod();
}

但是我注意到WebChannelFactory创建的对象客户端也实现了IDisposable。所以我也要处理这个对象。我没有找到任何其他方式:

using (WebChannelFactory<IServiceInterface> cf
      = new WebChannelFactory<IServiceInterface>("http://service.url"))
using(IDisposable client = (IDisposable)cf.CreateChannel())
{
    ((IServiceInterface)client).CallTheMethod();
}

我觉得这很难看。所以:

  • 我真的需要处理吗?我的意思是,当您处理工厂时(如果工厂保留对其创建的每个对象的引用可能),它可能被处理掉了吗?
  • 如果是的话,你有更好的方法吗?

1 个答案:

答案 0 :(得分:5)

这是一个非常复杂的问题。即使Microsoft's自己承认,处理渠道工厂也是一个糟糕的设计,多次改变,所以简短的答案是否定的,你需要使用替代它的东西。

这是一个alternative处理方法。