如果存在尝试访问不可用WCF服务的任务,则不会调用Windows服务上的OnStop方法

时间:2016-09-27 16:19:36

标签: c# .net wcf windows-services threadpool

今天我遇到了Windows服务的一些问题。

服务本身已经运行了一年多,其主要工作是为TCP客户端提供数据流。

不久前,我已经添加了对WCF服务的调用,以发送有关数据流的一些信息。

为了防止这些WCF调用严重影响已有的逻辑,我使用了

<a>

这很好但我注意到如果我尝试在远程WCF服务不可用时通过services.msc停止它,Windows服务会陷入停止状态。

如果远程WCF服务可用或在Windows服务停留在Stopping状态期间可用,则停止服务成功。

经过一些调试后,我发现没有调用Task.Run(() => { using(var proxy = new WCFProxy("configurationName")) { proxy.WCFClientMethod() } }); 方法。

我在互联网上发现了一些关于OnStop方法的文章,直到OnStop中的所有任务都完成后才被调用。但我不确定这是否与此问题有关,主要是因为ThreadPool中的AFAIK任务无论如何都应该完成,无论他们是否ThreadPool

我会很感激有关如何解决此问题的任何想法(使用Thread而不是Task.Run不是一个好选项,因为有很多调用WCF服务并且创建这么多线程可能会导致性能问题。)

1 个答案:

答案 0 :(得分:0)

刚刚解决了我的问题。

发现WCF调用阻止ThreadPool中的实际任务 这导致调用OnStop方法被卡在队列中。

我已经使WCF调用与async/await异步,现在一切都顺利运行。