2012-05-29 8 views
10

He estado usando Ashx junto con jQuery. He leído msdn, estoy hablando de la propiedad IHttpHandler.IsReusable.¿Cuándo es reutilizable un HttpHandler genérico (un ashx, la interfaz IHttpHandler)?

Obtiene un valor que indica si otra solicitud puede utilizar la instancia IHttpHandler .

¿Qué es "the IHttpHandler instance."? ¿Están tratando de hacerlo igual static para que todos puedan ver y usar? ¿Es reutilizable por el mismo que? (Cadena de consulta, galletas, etc?)

Si escribo esto:

public class MyHttpHandler : IHttpHandler 
    { 
     public void ProcessRequest(HttpContext context) 
     { 
     context.Response.Write(DateTime.Now.Ticks.ToString());  
     } 

     public bool IsReusable 
     { 
     get { return true; } 
     } 
    } 

aparece cada solicitud tendrá su propia actualizada- Datetime valor.

Respuesta

12

En su ejemplo, no está administrando ningún estado. Cualquiera puede llamar al ProcessRequest tantas veces como lo deseen en la misma instancia y obtendrán un nuevo DateTime.

Pero lo que si usted hizo esto:

private DateTime _dateTime = DateTime.Now; 

public void ProcessRequest(HttpContext context) 
{ 
    context.Response.Write(_dateTime); 
} 

Ahora que obtendrá la misma respuesta cada vez después de la instancia manejador se instancia. A menos que ASP.NET genere uno nuevo cada vez.

IsReusable puede indicar si su clase de controlador maneja cualquier estado que esté bien para compartir entre solicitudes separadas. Si administra el estado que no está bien para compartir, entonces no es probable que sea idempotente externamente, o posiblemente no sea seguro para subprocesos. Llamar al ProcessRequest con las mismas condiciones de entrada puede no dar como resultado el mismo resultado, porque su implementación específica del manejador también tiene algunas variables de nivel de instancia que no están bien para compartir cuando determina el resultado. (Y de hecho, técnicamente su implementación actual es un ejemplo de eso). En estos casos, la instancia probablemente no sea "reutilizable", y ASP.NET necesita generar una nueva instancia cada vez para garantizar la previsibilidad.

Así que para los casos en que no se maneja el estado, o si tiene manejadores muy simples donde el estado es "obvio" (como el ejemplo que tenemos aquí), IsResuable puede parecer inútil. Pero si tiene un manejador muy complejo, posiblemente uno que conserve un estado que es costoso de inicializar pero que está bien para compartir, querrá indicarle a ASP.NET que puede volver a utilizarlo para el rendimiento.

+2

nunca pude encontrar documentación de MSDN para éste:/ – IrishChieftain

+0

@IrishChieftain también por esta cuestión que ive pidió (y ni conseguir ningún bien asnwer) -lousy MSDN documenetation ... http://stackoverflow.com/questions/8298843/registerclientscriptblock-parameters-usages-in-real-scenarios –

+0

Eche un vistazo a la respuesta de Branislav aquí: http://stackoverflow.com/questions/1507572/streaming-databased-images-using-httphandler – IrishChieftain

0

Si tiene una variable de instancia allí, creo que encontrará que se comparte entre numerosas llamadas, por lo que si su fecha fue establecida como una variable de instancia y la devuelve en su solicitud de proceso, creo que volverá mismo valor, mientras que no lo hará si isreusable = false, ya que creará una nueva instancia de su controlador.

1

sentimos que acaba de publicar un enlace a la respuesta, pero una gran explicación de IsReusable:

IsReusable blog post

Esencialmente encenderlo si su código es completamente seguro para subprocesos, lo dejan fuera si no lo es. Bueno, eso es lo que deduzco de eso.

0

Aparentemente, esto mantiene el controlador en la memoria y es capaz de manejar múltiples solicitudes. Cuando se establece en falso, tiene que crear una nueva instancia del controlador para cada solicitud entrante.

public bool IsReusable 
{ 
    get 
    { 
     return true; 
    } 
} 
+0

sí ... sé esto. el título de la pregunta es "Truly Usages ..." –

+0

Dificultad del idioma entre nosotros Royi, ¿puede volver a formularlo de alguna manera, ya que no estoy seguro de lo que quiere decir exactamente :) – IrishChieftain

+0

seguro ... :) ya sé el significado de la propiedad . .... pero estoy buscando un escenario real (muestra) que tengo que decidir si es verdadero o falso .... –

Cuestiones relacionadas