質問

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...
}
役に立ちましたか?

解決

良い考えだとは思わない。問題の量は、...

  1. listressontsは根付いているため、アプリケーションの寿命があります。追加されるアイテムがたくさんある場合、メモリフットプリントは増加し続けます。したがって、このリストのアイテムの数に帰着したいです。

以下はショーストッパーになることができます...

  1. IISRESetまたはアプリケーションドメインリサイクルにより、この情報はすべてアプリケーションから削除されます。このリストにアイテムをどのように戻すことを計画していますか?データベース?

  2. ウェブファームがある場合はどうなりますか。このアプリケーションは、スケールアウトしようとする瞬間に期待どおりに機能しません。理由は... Webファームのすべてのサーバーに同じモジュールがロードされていても、ワーカープロセスのデータはローカルです。したがって、いくつかのデータベースからロードしない限り、すべてのサーバーでListrestressantsは異なります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top