特定のデータをキャッシュし、それを使用して Web 要求に応答する WCF サービスがあります。この要件に対処するために、サービスをシングルトンにしました ( and を使用InstanceContextMode.Single
しConcurrencyMode.Multiple
ます (はい、スレッドセーフです))。
次のバインディングを使用して、サービスのタイムアウトを最大に設定しようとしました。
<binding name="WebHttpBinding" receiveTimeout="24.20:31:23.6470000">
<security mode="TransportCredentialOnly">
<transport clientCredentialType="None" />
</security>
</binding>
私の問題は、サービス インスタンスが予測できない間隔で停止することです。つまり、ヒットする最初の Web 要求によってキャッシュが再構築されます (非常に遅いプロセス)。
理想的には、Web リクエストにヒットすることなく、毎日設定された時刻にキャッシュが再構築されることです。設定した時間にアプリ プールをリサイクルするように設定することもできますが、それでも最初の Web 要求までサービスがインスタンス化されないという問題は解決されません。サービスにリクエストを送信するスケジュールされた小さなスクリプトを作成する必要はありません。
WCF サービスでキャッシュを実行するためのより良い戦略はありますか? 他の人はここで何をしましたか?ベストプラクティスはありますか?