我试图查明在使用完 .net 服务引用客户端后是否有必要关闭它。我在网上遇到的几乎所有示例似乎都没有,但生成的客户端实现了 IDisposable,并且由于它确实打开了与服务的连接,我的直觉告诉我,当您需要关闭该连接时,您需要关闭该连接。已经完成了。
这是我从中提取的代码示例http://msdn.microsoft.com/en-us/library/bb386386(v=VS.90).aspx http://msdn.microsoft.com/en-us/library/bb386386(v=VS.90).aspx :
private void button1_Click(System.Object sender, System.EventArgs e)
{
ServiceReference1.Service1Client client = new
ServiceReference1.Service1Client();
string returnString;
returnString = client.GetData(textBox1.Text);
label1.Text = returnString;
}
我认为您至少应该在此方法的末尾调用 client.Close() ,最好将第一行包装在 using 语句中。我只是想获得一些反馈,以了解最佳实践是什么。
是的,您会这样做,但是这样做时您需要非常小心。关闭任何实现的东西时ICommunicationObject http://msdn.microsoft.com/en-us/library/system.servicemodel.icommunicationobject.aspx如果通道上出现错误或故障,则可能会导致对象的处理花费过多的时间。
因此,规定您致电Close method http://msdn.microsoft.com/en-us/library/system.servicemodel.icommunicationobject.close.aspx然后调用Dispose
方法上IDisposable
,对某些异常类型使用多个捕获并调用Abort http://msdn.microsoft.com/en-us/library/system.servicemodel.icommunicationobject.abort.aspx在你最终打电话之前Dispose
.
您可以将此逻辑包装在IDisposable
您可以在using
陈述。
这里的关键是创建一个实现的令牌IDisposable
然后在该实现中调用Close
,捕获相关异常,调用Abort
(如有必要)然后致电Dispose
.
这是作为一个扩展方法实现的,它返回一个IDisposable
在它上面,这又允许您在using
陈述。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)