Pregunta

He declarado un evento en un servidor HTTP Módulo por lo que sondeará los suscriptores por un valor de verdadero / falso para determinar si se debe seguir adelante con su tarea de ajustar la respuesta HTTP. Si sólo uno de abonado contesta cierto, entonces se ejecuta su lógica.

¿Esto tiene sentido?
¿Existen peligros potenciales que no estoy viendo?

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...
}
¿Fue útil?

Solución

No creo que es una buena idea. La cantidad de cuestiones dependerá de algunos factores como ...

  1. listRespondants serán arraigada y por lo tanto tendrán tiempo de vida de la aplicación. Si hay un montón de artículos que se han agregado, el consumo de memoria seguiría aumentando. Por lo tanto, sería más bien llegado hasta el número de artículos en esta lista.

Lo siguiente puede ser un tapón de la demostración ...

  1. IISReset o reciclaje de dominio de aplicación se eliminará toda esta información desde la aplicación. ¿Cómo planea traer los artículos de nuevo en esta lista? Base de datos?

  2. ¿Qué pasa si usted tiene un conjunto de servidores Web. Esta aplicación no funcionará como se espera el momento en que intenta escalar. La razón es que ... incluso si tiene el mismo módulo cargado en todos los servidores de la granja de servidores web en los datos de proceso de trabajo es local. De ahí que los listRespondants serían diferentes en todos sus servidores a menos que vaya a cargar desde alguna base de datos.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top