处理WCF对象
本文关键字:对象 WCF 处理 | 更新日期: 2023-09-27 17:49:36
如果我有一个循环,我在其中创建CommunicationObject (ClientBase准确),是否需要调用Close()函数后使用?
while(true)
{
Service client = new Service();
client.Close() // is in necessary?
}
CommunicationObject是否使用CLR收集后剩余的任何系统资源?如果是这样,如果我不关闭它会发生什么?是否有可能中断服务?
是的,你需要关闭它。实际上Service是一次性的,所以使用using语句:
using(var client = new Service()){
...
} // <-- this line will trigger the Close();
但是有一个小问题。如果客户端状态出错,Close方法可能会抛出异常。正确的做法应该是这样的:
try
{
...
client.Close();
}
catch (CommunicationException e)
{
...
client.Abort();
}
catch (TimeoutException e)
{
...
client.Abort();
}
catch (Exception e)
{
...
client.Abort();
throw;
}
如下所示:https://msdn.microsoft.com/en-us/library/aa355056%28v=vs.110%29.aspx
我个人觉得这有点小题大做…我总是用using语句。(第一个代码示例)