2

を使用してIIS7でホストされているWCFサービスがありますbasicHttpBinding。このサービスは、クライアントと呼ばれる複数のマシンに分散された他のサービスのコントローラーとして機能します。
サービスはで構成されるように構成されてSingle ContextModeMultiple ConurrecnyModeます。オブジェクトの状態を維持するため。私の問題は、一定期間非アクティブになった後、サービスがコンストラクターを再び呼び出すのを見て、その結果、すべての状態が失われることです。このサービスを永遠に存続させるための提案はありますか?

ありがとう!

4

2 に答える 2

0

IISがサービスをリサイクルしているようです。これを覚えておいてください(ベストプラクティスをホストしているインターネットインフォメーションサービスから抜粋):

IISホスティング環境は、メモリ内のローカル状態を維持しないサービス用に最適化されています。IISは、さまざまな外部および内部イベントに応答してホストプロセスをリサイクルし、メモリに排他的に格納されている揮発性の状態をすべて失います。IISでホストされるサービスは、プロセスの外部(データベースなど)またはアプリケーションのリサイクルイベントが発生した場合に簡単に再作成できるメモリ内キャッシュに状態を格納する必要があります。

リサイクルを無効にすることは可能ですが、IISでホストする必要があり、状態を気にする場合は、おそらく耐久性のある場所に置く必要があります。

于 2011-06-21T04:08:15.050 に答える
0

デフォルトでは、IISは29時間ごとにアプリケーションプールをリサイクルします。

これを回避するには、アプリケーションプールのリサイクル設定に移動し、このオプションのチェックを外します。

ここに画像の説明を入力してください

IISを再起動したり、web.configが変更されたときにアプリプールをリサイクルしたりできるため、これでも100%の状態の永続性は保証されません。状態が重要な場合は、データベースではなく状態を永続化することをお勧めします。メモリ上。

考慮すべきもう1つのオプションは、IISではなくWindowsサービスでサービスをホストすることです。

于 2011-06-21T04:13:20.003 に答える