Frage

Ich habe ein Ereignis auf einem HTTP-Modul deklariert, so dass es Abonnenten für einen Wahr / Falsch-Wert abfragt, um zu bestimmen, ob es voran mit ihrer Aufgabe, zwicken die HTTP-Antwort gehen. Wenn nur ein Teilnehmer wahr antwortet dann läuft er seine Logik.

Ist das sinnvoll?
Gibt es mögliche Gefahren Ich bin nicht zu sehen?

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...
}
War es hilfreich?

Lösung

Ich glaube nicht, es ist eine gute Idee. Die Höhe der Ausgaben hänge von einigen Faktoren wie ...

  1. listRespondants wird verwurzelt und wird daher Anwendung Lebensdauer. Wenn es ein paar Elemente, die noch hinzukommen, würde hält der Speicherbedarf zu steigern. So wäre es eher kommt auf die Anzahl der Elemente in dieser Liste.

Das Folgende kann ein Show-Stopper ...

sein
  1. IISReset oder Anwendungsdomäne recycle werden alle diese Informationen aus der Anwendung entfernen. Wie planen Sie die Einzelteile zurück in dieser Liste zu bringen? Datenbank?

  2. Was ist, wenn Sie eine Web-Farm haben. Diese Anwendung wird nicht funktionieren, da in dem Moment erwartet Sie versuchen, zu skalieren. Der Grund dafür ist ... auch wenn Sie das gleiche Modul haben auf allen Servern in der Web-Farm geladen sind die Daten im Arbeitsprozess lokal. Daraus ergibt sich die listRespondants würde in allen Ihren Servern unterschiedlich sein, wenn Sie es von einer Datenbank geladen werden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top