Domanda

Ho dichiarato un evento su un modulo HTTP in modo che il polling abbonati per un valore true / false per determinare se deve andare avanti con il suo compito di tweaking della risposta HTTP. Se solo un abbonato risponde vero allora si corre la sua logica.

Ha senso?
Ci sono potenziali insidie ??io non sto vedendo?

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...
}
È stato utile?

Soluzione

Non credo che sia una buona idea. La quantità di problemi dipenderebbe alcuni fattori come ...

  1. listRespondants saranno radicati e, quindi, avranno durata dell'applicazione. Se ci sono un sacco di elementi che vengono aggiunti, l'occupazione di memoria sarebbe continuare a crescere. Quindi, sarebbe piuttosto sceso per il numero di elementi in questa lista.

Di seguito può essere un tappo di spettacolo ...

  1. IISReset o riciclo del dominio applicazione rimuoveranno tutte queste informazioni dalla vostra applicazione. Come pensate di portare gli articoli di nuovo in questa lista? Database?

  2. Che cosa succede se si dispone di una Web farm. Questa applicazione non funzionerà come previsto al momento in cui si tenta di scalabilità orizzontale. Il motivo è ... anche se si ha lo stesso modulo caricato su tutti i server della farm web i dati nel processo di lavoro è locale. Da qui le listRespondants sarebbero diverse in tutti i server a meno che non si sta caricando da qualche banca dati.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top