处理WCF对象

本文关键字:对象 WCF 处理 | 更新日期: 2023-09-27 17:49:36

如果我有一个循环,我在其中创建CommunicationObject (ClientBase准确),是否需要调用Close()函数后使用?

while(true)
{
 Service client = new Service();
 client.Close() // is in necessary? 
}

CommunicationObject是否使用CLR收集后剩余的任何系统资源?如果是这样,如果我不关闭它会发生什么?是否有可能中断服务?

处理WCF对象

是的,你需要关闭它。实际上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语句。(第一个代码示例)