2016-10-12 10 views
0

データベースにデータを書き込むためにいくつかのバックグラウンドスレッドを実行するWCFサービスで作業しています。バックグラウンドスレッドは、標準プロデューサ&消費者のパターンを使用して実装されている:WCFプロセス内でAutoResetEventがスレッドを起動しないことがある

​​

サービスは、シングルインスタンス・モードで実行されます。

今、私たちが守っ何:

ワーカースレッドが開始され、すべてがしばらくの間、正常に動作します。

ある時点で、データがキューとイベントセットに追加されても、どうにかしてワーカースレッドはもう目を覚ますことはありません。

ワーカースレッドの優先度も高いので、サーバーが非常にビジー状態であってもタイムスライスを取得する必要があります。

私はこの時点で何をすべきか分かりません。IISホストプロセスがある時点でワーカースレッドをもうスケジュールしないように決定したようです。

答えて

1

ここで問題となるのはIISです。 IISワーカープロセスは、制御できない理由のため、いつでもシャットダウンできます。また、リサイクル時にワーカープロセスが重複する可能性があります。

あなたのケースでは、Windowsサービスがより良い選択となります。

詳細については、この投稿を確認してください。WCF hosted in IIS vs in Windows Service

+0

ホストプロセスがシャットダウンされません。プロセスはまだ生きており、他の要求からログエントリが作成されます。データベースのワーカースレッドのみがこれ以上実行されない – user1803928

+0

正確には、WCFスレッドを放棄することはできません。いくつかのバックグラウンドワーカーを起動してからリターンするリクエストを開始すると、ワーカースレッドは失われます。 WCFの応答を返す前に、すべてのバックグラウンドスレッドを終了するまで待つ必要があります。 Windowsサービスを使用している場合は、WCFでAsyncメソッドを作成することができます。これにより、バックグラウンドスレッドを開始して後で返すことができます。IISで行うことはできません。 –

+0

これはインスタンスコンテキストモードのシングルでは発生しません。 – user1803928

関連する問題