2016-09-27 11 views
0

今日、Windowsサービスで少し問題が発生しました。利用できないWCFサービスにアクセスしようとしているタスクがある場合、WindowsサービスのOnStopメソッドが呼び出されない

サービス自体は1年以上にわたって正常に機能しており、主な仕事はTCPクライアントにデータストリームを提供することです。

私はWCFサービスへの呼び出しを追加して、データストリームに関する情報を送信しました。

WCFは厳しく、既存のロジックに影響を与えるから呼び出すこれらを防止するために、私は

Task.Run(() => { 
    using(var proxy = new WCFProxy("configurationName")) 
    { 
     proxy.WCFClientMethod() 
    } 
}); 

これがうまく機能を使用するが、私はservices.mscとを経由して、それを停止しようとすると、Windowsサービスが停止状態で立ち往生ことに気づきましたリモートWCFサービスは使用できません。

停止サービスは、リモートWCFサービスが利用可能な場合、またはWindowsサービスが停止状態で停止している間に利用可能になった場合に成功します。

少しのデバッグ後、OnStopメソッドが呼び出されていないことが分かりました。

ThreadPoolのすべてのタスクが完了するまでOnStopメソッドが呼び出されないという記事がインターネット上で見つかりました。 AFAIKのタスクがThreadPoolにあるため、とにかく終了する必要があるため、この問題と関連があるかどうかはわかりません。faulted(EndpointNotFoundException)かどうかは関係ありません。

この問題を解決する方法については、Task.RunではなくThreadを使用するとWCFサービスへの呼び出しが多く、パフォーマンスの問題を引き起こす可能性があるため、このオプションを使用していただきありがとうございます。

答えて

0

ただ私の問題を解決しました。

OnStopメソッドの呼び出しがキューに滞留する原因となったThreadPool のWCF呼び出しで実際のタスクがブロックされていることがわかりました。

私は、async/awaitと非同期でWCF呼び出しを行いましたが、今はすべてがスムーズに実行されています。

関連する問題