明确关闭客户端是否必要?

时间:2013-11-07 08:34:11

标签: c# wcf wcfserviceclient

我见过一个预先存在的代码,它使用自动生成的客户端来访问WCF。原始版本,如自动生成页面上所示,如下所示。

public int GetNumber()
{
  ServiceClient client = new ServiceClient();
  int number = client.GetNumber();
  client.Close();
  return number;
}

它被重构为以下内容。

public int GetNumber()
{
  ServiceClient client = new ServiceClient();
  return number.GetNumber();
}

我不确定是否保证客户端将被关闭(通过GC或任何其他东西)。我或者应该建议添加两行代码吗?

2 个答案:

答案 0 :(得分:1)

您需要调用Close方法。或者使用以下代码段,该代码段在client块退出时废弃using对象

using(ServiceClient client = new ServiceClient())
{
    return number.GetNumber();
}

答案 1 :(得分:1)

根据我的理解,你是正确的,.Close()可以省略 只要存在不完整的异步任务,就不会通过调用.Close()而不是通过超出范围的客户端对象来处理客户端。 WCF服务的using声明似乎是不明智的,因为下面评论中约翰的(伟大)链接表明了这一点。