1

3 つのアプリケーション プールで 3 つのアプリケーションを実行しています。アプリケーションの 1 つは、特権アクセスを持つユーザーがほとんどいない管理アプリです。管理アプリで許可される機能の 1 つは、ダウンタイム通知の作成です。そのため、ユーザーが管理アプリにアクセスしてダウンタイム通知を作成すると、他の 2 つのアプリは新しい通知があることを認識し、ログイン ページに表示することになっています。

問題は、これらの通知がキャッシュされ、各アプリが個別のアプリ プールにあるため、管理アプリが他の 2 つのアプリケーションのダウンタイム通知キャッシュをクリアする方法がないことです。

私はこれを回避する方法を見つけようとしています。私が考えることができる唯一のことは、キャッシュをクリアする必要があることを示すレコードを DB に挿入することです。他の 2 つのアプリは、ログイン ページの読み込み時に DB をチェックします。少しきれいに機能する可能性のある別のアプローチを持っている人はいますか?

*ちなみに、これは単なるダウンタイム通知よりも広まっていますが、これは例として使用したにすぎません。

編集

アプリ プールの再起動は、バックグラウンド スレッドを強制終了する可能性が高いため、現実的ではありません。

4

4 に答える 4

2

私が正しく理解していれば、あなたは基本的に管理アプリから他のアプリにメッセージを送信しようとしています。管理アプリケーションから呼び出すことができるこれらのアプリでWCFサービスを作成することを検討する必要があるかもしれません。これは、データベースなどの共有メディアを使用したくない場合や、ポーリングモデルの使用を強制しない場合に、異なるアプリ間で通信するための標準的な方法です。

于 2012-10-23T20:56:07.870 に答える
1

これを別の見方をすると、これは基本的にアプリケーション間のメッセージングの問題であり、解決に役立つ可能性のある多数のライブラリがすでに存在します。 このためにRabbitMQが思い浮かびます。C#クライアントがすべて準備できています。 MSMQは、もう1つの潜在的なテクノロジであり、すでにWindowsに付属しているテクノロジです。インストールするだけで済みます。

于 2012-10-23T21:00:36.747 に答える
0

キャッシュしているデータベース情報の場合は、運試しにSqlCacheDependencyを設定してみてください。

それ以外の場合は、ASP.NETキャッシュを使用しないことをお勧めします。また、分散キャッシュスキームを使用するサードパーティのソリューションを見つけることをお勧めします。そうすれば、すべてのアプリケーションが3つの個別のキャッシュではなく1つのキャッシュを使用します。

于 2012-10-23T20:57:51.863 に答える
0

これが最良の答えだとか正しい答えだと言っているのではありません。

私は、中央のバックオフィス Web サイトの場所からカタログ データを取得し、それらをローカルにキャッシュすることに依存する、別々のサーバーとデータ センターに一連の e コマース Web サイトを持っています。これの最初の繰り返しでは、中央の場所が対応する消費 Web サイトに ping を実行して、独自のキャッシュ更新ルーチンを開始できるようにするための GET 要求を単純に使用しました。各 e コマース サーバーで SSL を使用しました。SSL GET を介してバックオフィス Web アプリに資格情報を送信させ、安全に更新を開始することができました。

後の段階で、各消費 Web サイトがクライアントになり、データの変更をリッスンするバックオフィスで代わりにソケットを使用する方が効率的であることがわかりました。バックオフィス Web サイトは、特定のアカウントが変更されたときに対応する Web サイトに通信し、これを非常に具体的に通信できます。このアプローチははるかにきめ細かく、大量のチャンク更新とは対照的に、必要に応じて小さなビットで更新できますが、これは最初の試行よりも明らかに複雑でした.

于 2012-10-23T21:05:13.690 に答える