【问题标题】:Is it imperative to explicitly close the client?是否必须明确关闭客户端?
【发布时间】:2013-11-07 08:34:10
【问题描述】:

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

【问题讨论】:

    标签: c# wcf wcfserviceclient


    【解决方案1】:

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

    【讨论】:

    • 实际上,这是极少数使用using块的地方之一。见stackoverflow.com/questions/573872/…
    • 很有趣,谢谢约翰。我已更正,并将编辑我的答案
    • 嗯...谁在下面提倡使用using并捍卫Close()应用的回复上+1?根据这些信息,我希望看到 this 的回复更加 +ified,但我原则上避免投反对票。
    【解决方案2】:

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

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

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-08
    • 2020-03-16
    • 1970-01-01
    • 1970-01-01
    • 2011-07-26
    • 2023-03-13
    相关资源
    最近更新 更多