2017-01-30 7 views
2

私のWCFサービスでは、リソース集約型のデータを保持するために静的な辞書を使用しています。アプリケーションプールがリサイクルされると、リソースをクリーンアップする必要があります。アプリケーションプールがリサイクルされていることを検出する方法(イベントなど)はありますか?WCFサービスのアプリケーションプールの再起動を検出するにはどうすればよいですか?

答えて

0

アプリケーションプールがリサイクルされると、すべての静的オブジェクトがリセットされます。静的辞書のインスタンスを作成するときに、ファイルなどの外部リソースをすべて消去することができます。このような何か:

public static partial class ProjectValues 
{ 
    public static ConcurrentDictionary<string, string> MessageDictionary { private set; get; } 


    static ProjectValues() 
    { 
     try 
     { 
      MessageDictionary = new ConcurrentDictionary<string, string>(); 
      //then clear the resource here 
     } 
     catch (Exception ex) 
     { 
      return; 
     } 
    } 
} 
0

は、私が アプリケーションプールがリサイクルされていることを検知することが可能な(例えば、イベントのための)任意の方法はありますか?

金田。

Phill Haackによれば、IISは、HostingEnvironment.RegisterObjectという静的メソッドを公開しています。これにより、IRegisteredObjectの実装を渡すことができます。理論的には

が、これはあなたのアプリケーションが実行されているのw3wp.exeプロセスを強制終了することを決定する前IRegisteredObject.Stop操作を呼び出すためにIISに指示します。

が、私はこのアプローチはフェイルセーフとがありますされていないため、理論的に言いますあなたがクリーンアップを完了する前に、AppDomainが呼び出すことなく離れたり、コールしてもシャットダウンしたりすることができます。

関連する問題