2010-12-18 17 views
6

長時間実行される非同期スレッドを持つWCFサービスがあります。 この長時間実行される操作は、1日以上実行できます。 は、私たちは、IIS 6.WCFで長時間実行される非同期スレッド

スレッドがOK実行されている上でWCFサービスをホストしているが、20分には、我々はエラーメッセージを受信して​​いる:

スレッドのように死んでいる
「スレッドが中止されました」結果。

当社のWCFサービス構成:
[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single)]
[ServiceBehavior(ConcurrencyMode = ConcurrencyMode.Single)]

あなたは、この問題の原因を示唆することはできますか?

ありがとうございました。

答えて

9

このWebサービスに対するアクティビティ(要求なし)がない場合、IISはアプリケーションドメインをアンロードして、すべてのスレッドを強制終了させることになります。既定値は20分で、IISのアプリケーションプールのプロパティで構成できます。また、低メモリで実行されているシステムなど、アプリケーションプールがリサイクルされる原因となる他の要因もあります。 IISでこのようなことをホストすることは信頼できないかもしれません。 Windowsサービスで長時間実行されるタスクをホストすることを検討することもできます。

+0

@Arturの場合は、アプリケーションプールの設定を確認してください。ただし、そのようなタスクにWindowsサービスを使用することを強くお勧めします。 –

+2

ありがとうございます。私はWindowsサービスでそれをホストすべきだと思います。 –

7

IIS6には、要求のない既定の時間の後にアプリケーションプールをシャットダウンする設定があります。既定値は20分です。それはあなたが走っているもののようです。この設定は、App Pool properties => Performanceタブ=>「アイドル状態になった後のワーカープロセスのシャットダウン」のチェックマークを外して確認できます。

一般に、スレッドを中断したりプロセスを完全にシャットダウンしたりすることが多いため、IISで長時間実行されるタスクをホストするのは悪い考えです。アプリケーションプールは最も顕著なものです。

+0

@driisさん、ありがとうございます。 –

2

Windowsサービスホストに長期実行タスクを開始するWCFエンドポイントを持たせることができます。 Windowsサービスは長時間実行されることを意図されており、この状況に最適です。

関連する問題