WCF IDisposable设计差异

时间:2010-12-22 16:30:21

标签: wcf idisposable

为什么具体的WCF客户端实现确实实现了IDisposable而不是为每个wcf客户端提供的默认开箱即用接口作为.net的一部分?

    using(WcfClient client = new WcfClient) 
    {
         client.WebMethod();
    }


    using(IWcfClient client = new WcfClient) 
    {
         client.WebMethod();
    } //throws bc it's not part of the Interfact but is the part of the base class every wcf client implements along the interface?

为什么不把它作为界面的一部分,因为人们可以选择如何处理以自定义方式清理wcf?

1 个答案:

答案 0 :(得分:1)

这是因为接口是Web服务的数据契约,并且数据契约实现IDisposable没有意义。数据合同包含操作合同,没有任何可处理的内容。这是需要处理的通道,这就是自动生成的代理类(WcfClient)实现IDisposable的原因。

如果您坚持使用数据合同,可以试试这个:

IWcfClient client = new WcfClient();
using((IDisposable)client) 
{
    client.WebMethod();
}

但我真的不明白有什么问题:

using(var client = new WcfClient()) 
{
    client.WebMethod();
}