【发布时间】:2017-02-05 09:11:23
【问题描述】:
今天我在使用 Windows 服务时遇到了一点问题。
服务本身已经运行了一年多,它的主要工作是为 TCP 客户端提供数据流。
不久前,我添加了对 WCF 服务的调用以发送有关数据流的一些信息。
为了防止这些 WCF 调用严重影响已经存在的逻辑,我使用了
Task.Run(() => {
using(var proxy = new WCFProxy("configurationName"))
{
proxy.WCFClientMethod()
}
});
这很好用,但我注意到如果我在远程 WCF 服务不可用时尝试通过 services.msc 停止它,Windows 服务会卡在 Stopping 状态。
如果远程 WCF 服务可用或在 windows 服务卡在 Stopping 状态期间变为可用,则停止服务成功。
经过一番调试,我发现OnStop 方法没有被调用。
我在互联网上找到了几篇关于在 ThreadPool 中的所有任务完成之前不调用 OnStop 方法的文章。但我不确定这是否与这个问题有关,主要是因为ThreadPool 中的 AFAIK 任务无论如何都应该完成,无论它们是否faulted(EndpointNotFoundException)。
我将不胜感激有关如何解决此问题的任何想法(使用 Thread 而不是 Task.Run 不是一个好的选择,因为对 WCF 服务的调用很多并且创建如此多的线程可能会导致性能问题)。
【问题讨论】:
标签: c# .net wcf windows-services threadpool