2010-03-11 13 views
5

¿Es posible almacenar en caché la respuesta de un controlador http en el servidor y en el cliente?Almacenamiento en caché de la respuesta de un servidor ASP.NET HTTP Handler y del lado del cliente

Esto no parece estar haciendo el truco:

_context.Response.Cache.SetCacheability (HttpCacheability.Public); _context.Response.Cache.SetExpires (DateTime.Now.AddDays (7));

El _context es el HTTPContext pasado como argumento para el método ProcessRequest en la implementación de IHttpHandler.

¿Alguna idea?

Actualización: El cliente almacena en caché las imágenes que se cargan a través del httphandler, pero si otro cliente hace la misma llamada, el servidor no lo ha almacenado en caché. Entonces, para cada cliente que solicita la imagen, el servidor va a la base de datos (y a la extensión de archivos). Si usamos una página aspx en lugar de un httphandler junto con un perfil de almacenamiento en caché, entonces las imágenes se almacenan en caché tanto en el cliente como en el servidor.

+0

¿Ha intentado usar Fiddler para comprobar que los encabezados realmente están en el paquete recibido en el cliente? – Timores

+0

@Timores El cliente hace caché de llamadas al controlador, pero si otro cliente hace la misma llamada, el servidor no lo almacena en caché. –

Respuesta

3

Gracias por su respuesta en los comentarios.

Cache.SetCacheability se utiliza para definir si un proxy o el cliente tiene permiso para almacenar en caché, no en el servidor.

Eche un vistazo a IIS 7 donde se explica cómo almacenar en caché la salida de un controlador HTTP en el servidor.

+0

¡Thx, Timores, lo comprobaremos! Extraño que con una página aspx puede almacenar en caché en el nivel del servidor, pero con un httplevel debe hacerlo en IIS (¿o guardaré los cambios en el web.config?) –

4

Con IIS7, esto se puede hacer en web.config.

Por ejemplo, supongamos que su URL es ashx:

/ashxfiles/myhandler.ashx

... y desea variar de cadena de consulta: params

id , lang

Agregue lo siguiente a su web.confi g:

<location path="ashxfiles"> 
    <system.webServer> 
     <caching> 
      <profiles> 
       <add extension=".ashx" policy="CacheForTimePeriod" duration="00:00:10" varyByQueryString="id, lang" /> 
      </profiles> 
     </caching> 
    </system.webServer> 
</location> 

Esta regla se aplica a todos los archivos en el directorio .ashx, por lo que es posible que desee colocar los archivos en carpetas separadas .ashx si necesita un control más granular de la configuración de caché.

Cuestiones relacionadas