为什么具体的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?
答案 0 :(得分:1)
这是因为接口是Web服务的数据契约,并且数据契约实现IDisposable
没有意义。数据合同包含操作合同,没有任何可处理的内容。这是需要处理的通道,这就是自动生成的代理类(WcfClient)实现IDisposable
的原因。
如果您坚持使用数据合同,可以试试这个:
IWcfClient client = new WcfClient();
using((IDisposable)client)
{
client.WebMethod();
}
但我真的不明白有什么问题:
using(var client = new WcfClient())
{
client.WebMethod();
}