nit*_*irc 16 .net c# wcf web-services idisposable
我试图找出在完成使用后关闭.net服务引用客户端是否有必要.几乎所有我在网上遇到的例子似乎都没有,但是生成的客户端实现了IDisposable,因为它确实打开了与服务的连接,我的直觉告诉我你需要关闭那个连接.完成它.
这是我从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;
}
Run Code Online (Sandbox Code Playgroud)
我认为你至少应该在这个方法结束时调用client.Close(),最好还是在using语句中包装第一行.我只是希望得到一些反馈,以找出最佳实践.
cas*_*One 22
是的,你这样做,但是这样做时你需要非常小心.在关闭ICommunicationObject通道中存在错误或故障的情况下,关闭任何实现潜在可能性的事物会导致对象的处理花费过多的时间.
因此,规定您调用Close方法然后调用Dispose方法IDisposable,对某些异常类型使用大量捕获并Abort在最终调用之前调用Dispose.
您可以将此逻辑包装在IDisposable可在using语句中使用的实现中.
这里的关键是创建一个实现的令牌,IDisposable然后在该实现中,调用Close,捕获相关的异常,调用Abort(如果需要)然后调用Dispose.
这是作为一个扩展方法实现的,它返回一个IDisposableon,然后允许你在一个using语句中使用它.