サーバーから返されるすべてのリクエストで「ユーザー メッセージ」を利用できるようにしたいと考えています。ユーザー メッセージがない場合、メッセージは空白に戻ります。アイコンがある場合、リクエストが完了すると、各ユーザー画面でアイコンがアクティブになります。
[編集] 「ユーザー メッセージ」は、私が展開しているアプリケーションの管理者によって設定されているものです。管理者は、フィールドにテキストを入力し、ボタンをクリックして、このメッセージをシステムの他のすべてのユーザーに送信できます。別のユーザーが何らかのアクションを実行するたびに、現在のユーザー メッセージが JSON 応答に添付され、フロントエンドによって処理されます。
これを最適化するために、メッセージを(データベースではなく)メモリに保存する必要があります。
私は静的を使用しようとしました。HttpApplicationState を使用しようとしました。どちらの場合も、ユーザー メッセージの値は一定期間後に「空白」になります。いくつかの調査の結果、静的と HttpApplicationState の両方がIISの影響を受け、いつアプリケーション プールをリサイクルするかが決定されるようです。(またはそのようなもの)
この静的変数の揮発性は神秘的です。これは静的である必要があります。IIS自体が存続している限り、この変数も存続するはずです。ある種の「リセット」などに依存するべきではありません。HttpApplicationState は、私が完全に理解していない他の状況です。
信頼できる不揮発性変数に値を格納する方法が必要です。この値を今日設定した場合、 IISを停止して再起動しない限り、明日または来週には設定されているはずです。
何か助けはありますか?
以下の受け入れられた回答に従って、問題を解決するために私が行ったことは次のとおりです。
- ユーザーメッセージはいつかのものです。そのため、メッセージが管理者によって設定されると、その時点で応答をデータベースに保存し、それを Application["UserMessage"] オブジェクトに保存します。
- ユーザーからのラウンドトリップが発生すると、ユーザー メッセージのメモリ内テキストが json の戻り値に追加されます。
- 管理者はいつでもメッセージをクリアできます。これにより、メモリ内メッセージとデータベース フィールドの両方がクリアされます。
- IIS が十分であると判断し、アプリケーションをリサイクルすると、Application_Start() メソッドは (他のタスクの中で) ユーザー メッセージが設定されたときに格納されたデータベース値からユーザー メッセージを再シードします (手順 1 に従って)。
これで、アプリケーションは期待どおりに動作します。システムへのユーザー要求ごとにデータベースに追加料金が支払われることはありません。ユーザー メッセージは常にメモリから取得されます。これに加えて、ユーザー メッセージのデータベースが更新またはロードされる回数はごくわずかです。