今日、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サービスへの呼び出しが多く、パフォーマンスの問題を引き起こす可能性があるため、このオプションを使用していただきありがとうございます。