IHTTPMODULEに.NETイベントを実装しても大丈夫ですか?
-
29-09-2019 - |
質問
HTTPモジュールでイベントを宣言したので、サブスクライバーを真の/偽値を投票して、HTTP応答を調整するタスクを進める必要があるかどうかを判断します。 1人のサブスクライバーのみがtrueに答えた場合、そのロジックを実行します。
これは理にかなっていますか?
私が見ていない潜在的な落とし穴はありますか?
public class ResponseTweaker : IHttpModule {
// to be a list of subscribers
List<Func<HttpApplication, bool>> listRespondants = new List<Func<HttpApplication, bool>>();
// event that stores its subscribers in a collection
public event Func<HttpApplication, bool> RequestConfirmation {
add {
listRespondants.Add(value);
}
remove {
listRespondants.Remove(value);
}
}
public void Init(HttpApplication context) {
if (OnGetAnswer(context)) // poll subscribers ...
// Conditionally Run Module logic to tweak Response ...
}
/* Method that polls subscribers and returns 'true'
* if only one of them answers yes.
*/
bool OnGetAnswer(HttpApplication app) {
foreach (var respondant in listRespondants)
if (respondant(app))
return true;
return false;
}
// etc...
}
解決
良い考えだとは思わない。問題の量は、...
- listressontsは根付いているため、アプリケーションの寿命があります。追加されるアイテムがたくさんある場合、メモリフットプリントは増加し続けます。したがって、このリストのアイテムの数に帰着したいです。
以下はショーストッパーになることができます...
IISRESetまたはアプリケーションドメインリサイクルにより、この情報はすべてアプリケーションから削除されます。このリストにアイテムをどのように戻すことを計画していますか?データベース?
ウェブファームがある場合はどうなりますか。このアプリケーションは、スケールアウトしようとする瞬間に期待どおりに機能しません。理由は... Webファームのすべてのサーバーに同じモジュールがロードされていても、ワーカープロセスのデータはローカルです。したがって、いくつかのデータベースからロードしない限り、すべてのサーバーでListrestressantsは異なります。
所属していません StackOverflow