Question

Je l'ai déclaré un événement sur un HTTP module il interrogera les abonnés pour une valeur true / false pour déterminer si elle doit aller de l'avant avec sa tâche de peaufiner la réponse HTTP. Si un seul abonné répond vrai, alors il exécute sa logique.

Est-ce que ce sens?
Y at-il des pièges potentiels que je ne vois pas?

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...
}
Était-ce utile?

La solution

Je ne pense pas que ce soit une bonne idée. Le montant des émissions dépend de certains facteurs comme ...

  1. listRespondants seront enracinés et donc auront la vie de l'application. S'il y a un tas d'éléments qui sont ajoutés, l'empreinte mémoire continuerait à augmenter. Donc, ce serait plutôt baisser le nombre d'éléments dans cette liste.

Ce qui suit peut être un bouchon spectacle ...

  1. IISReset ou application de recyclage de domaine va supprimer toutes ces informations de votre application. Comment comptez-vous apporter les éléments de retour dans cette liste? Base de données?

  2. Que faire si vous avez une batterie de serveurs Web. Cette application ne fonctionnera pas comme prévu au moment où vous essayez de sortir l'échelle. La raison ... même si vous avez le même module chargé sur tous les serveurs de la batterie web les données dans processus de travail est local. Par conséquent, les listRespondants seraient différentes dans tous vos serveurs, sauf si vous le chargez d'une certaine base de données.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top