WAS がホストするWCF サービスが保持するキャッシュ エントリを無効にする必要があります。しわは、無効化のトリガーが外部プロセスから来ることです。次のアプローチを検討しました。
- System.Runtime.Caching.MemoryCacheをキャッシュ エントリの有効期限付きで使用します。キャッシュの基になるデータへの変更はスケジュールどおりに行われず、古いデータを返してはならないため、これはうまくいきません。
- WCF サービスに「管理」
InvalidateCache()
メソッドを追加して、必要に応じて外部プロセスによって呼び出されるキャッシュを無効にします。これは、WCF サービスが WAS でホストされていない場合に有効です。つまり、アプリがアイドル状態で、WAS によってアンロードされた場合、メソッドを呼び出すと、InvalidateCache()
メソッドが不必要にアクティブ化されます。WAS にサービスの状態を照会し、サービスがアクティブな場合にのみ条件付きで呼び出す方法を探しましたが、WAS 用のそのInvalidateCache()
ような API は見つかりませんでした。 - クロスプロセス キャッシュの無効化をトリガーするメカニズムとして、Windows の名前付きイベントを使用します。名前付きイベントをリッスンし、それに応じて独自のキャッシュを無効にするように WCF サービスを構成できると思いますが、それは一般的な問題に対する不必要に複雑な解決策のように思えます。
上記の3つのアプローチの1つを実行可能にするより良いアプローチまたは何かがありますか?