处置WCF对象

时间:2015-05-19 07:16:43

标签: c# .net wcf .net-remoting

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

jquery

CommunicationObject是否使用CLR收集后仍然存在的任何系统资源?如果是这样,如果我不关闭它将会发生什么?是否有可能放弃服务?

1 个答案:

答案 0 :(得分:0)

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