如何处置System.ServiceModel.ClientBase <tchannel>?</tchannel>

时间:2011-02-10 21:01:21

标签: idisposable

我正在使用扩展ClientBase&lt;&gt;:

的类
interface IService {}
class MyServiceClient : ClientBase<IService> {}

我遇到的问题是FxCop抱怨MyServiceClient作为成员变量的类也应该实现IDisposable并处理MyServiceClient。

ClientBase有一个Dispose()的显式实现,这意味着一个简单的MyServiceClient.Dispose()不能编译。我必须明确地转换为IDisposable。这是为什么?这是一个我不应该使用Dispose()的信号吗?我应该使用Close()吗?

2 个答案:

答案 0 :(得分:4)

Close and Dispose - which to call?中建议Close和Dispose具有相同的实现。 Here是一个示例包装类(usage),它在Dispose函数中调用Close。所以打电话给Close似乎很好。

答案 1 :(得分:0)

我使用bloc将我的Base继承者包装起来并且它有效。像这样:

using (var someClient = new SomeClient(_netTcpBinding,_endpointAddress))
{
    return someClient.SomeMethod();
}

但是当我打开cmd并输入netstat -a -n -p TCP时,我看到了 enter image description here

我在这里找到答案http://sahilmalik.blogspot.ru/2005/11/sockets-and-timewait.html 我在这种情况下重写了我的代码http://marcgravell.blogspot.ru/2008/11/dontdontuse-using.html