【问题标题】:WCF: How to stop myServiceHost.Close() from disposing of myServiceHost object?WCF:如何阻止 myServiceHost.Close() 处理 myServiceHost 对象?
【发布时间】:2011-02-10 23:58:33
【问题描述】:

显然 Close 和 Dispose 实际上是相同的。我希望能够关闭和打开我的 ServiceHost 实例,而不必每次都重新实例化它。有任何想法吗?谢谢。

【问题讨论】:

  • 或者换个说法——如何在不调用 Close 的情况下“禁用”myServiceHost?

标签: c# wcf visual-studio-2010 garbage-collection servicehost


【解决方案1】:

ServiceHost.Close 实际上与Dispose() 相同。通常,对于所有具有 Close() 方法的类型,这是正确的 - Dispose() 是根据 Close() 实现的。

仅供参考 - ServiceHostBase 通过以下方式明确实现 Dispose()

void IDisposable.Dispose()
{
    base.Close();
}

这实际上意味着当您关闭 ServiceHost 时,您将始终对它进行 Dispose()。没有支持的方式来“重新打开”它而不重新创建它。

【讨论】:

  • @Reed Copsey,感谢您的回复。让我换个说法,我可以在不调用 Close 的情况下“禁用”serviceHost 对象吗?
  • @Sam:不。关闭它,当你想再次“启用”它时重新创建它。
  • 为什么要“禁用”serviceHost?该服务应始终对其调用者可用。
  • @Sam:摆脱这种习惯。你会发现,实际上,当你说完所有的事情后,那样想对你的伤害多于帮助。 C# 中的分配很便宜 - 与本机代码不同 - 让对象被收集和重新分配通常比试图阻止它更快,特别是如果它的寿命不长......
  • @Sam:取决于你在做什么。如果有一个简单的“IsEnabled”属性,那么当然没有。但是,您会感到惊讶 - 我发现按要求执行我过去认为的事情(即:从循环中解除分配)通常会减慢 C# 程序的速度,而不是改进它们...
猜你喜欢
  • 2011-06-18
  • 1970-01-01
  • 2010-09-20
  • 1970-01-01
  • 2012-11-09
  • 2018-04-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多