Windows サービス (C#、.net 3.5) でホストされている非常に基本的なワークフローがあり、奇妙な問題があります。
構成:
- ランタイムとワークフロー インスタンスは同じスレッドで作成されます。
- インスタンスを継続的に実行するために、「エンドレス」ループでインスタンスで Start を実行するバックグラウンド スレッドがあります。
ワークフローから例外がスローされたときに、サービスをクリーンアップしてシャットダウンしたいと考えています。問題は、それが機能しないことです:)
私は基本的に行う停止方法を持っています:
...
backgroundThread.Join(..);
if (workflowRuntime.isStarted)
workflowRuntime.StopRuntime();
...
ここでの問題は、workflowRuntime.StopRuntime() です。呼び出されると、スタックします。戻り値、例外、タイムアウトはありません。止まるだけです。workFlowInstance.TryUnload() も使用しようとしましたが、同じことです。立ち往生するだけです。
スレッド ID を確認しましたが、ワークフローを作成して開始した停止メソッドのスレッドと同じです。
アイデアはありますか?ワークフロー ランタイムのすべてのクリーンアップをスキップすると、サービスがゾンビ状態になり、シャットダウンできなくなります。