0

我见过一个预先存在的代码,它使用自动生成的客户端来访问 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 还是其他任何东西)。是还是应该建议添加两行代码?

4

2 回答 2

1

据我了解,您是正确的,因为.Close()可以省略。
只要有不完整的异步任务,客户端就不会被释放,不是通过调用.Close(),也不是通过超出范围的客户端对象。WCF 服务的using声明似乎是不明智的,正如约翰在下面的评论中的(伟大的)链接所表明的那样。

于 2013-11-07T09:04:43.157 回答
1

您需要调用Close方法。或使用以下代码片段client在退出using块时处理对象

using(ServiceClient client = new ServiceClient())
{
    return number.GetNumber();
}
于 2013-11-07T08:56:17.467 回答