1

当托管在 servicehost 对象中时,任何人都可以推荐一种关闭 WCF 服务及其线程的“干净”方式吗?

调用 servicehost.Close(); 当服务产生其他线程时不起作用:/

干杯,

4

1 回答 1

1

如果没有服务本身及其产生的线程的协作,这确实是您无法从外部安全地完成的事情。一种选择是通过可以通过主机环境控制的特殊方式让服务产生线程,并让这些线程进一步协作,以便可以干净地关闭它们。

例如,您可以有一个自定义线程池类,它为每个线程生成一个对事件的引用,该事件向它发出信号,它必须停止处理和关闭。.NET 4.0 将通过任务库使这变得更简单,但同时您将不得不自己完成。

此外,在这种情况下,如果您正在生成原始线程(而不是使用 CLR 线程池)以将它们创建为后台线程,您应该小心。这有助于避免在您希望进程关闭时保持进程处于活动状态(尽管我仍然建议您确保完全关闭它们)。

于 2009-09-24T14:32:12.003 回答