IIS7.5 OutputCacheModule núcleo de almacenamiento en caché 'público' haciendo caso omiso de URL

StackOverflow https://stackoverflow.com/questions/4642652

Pregunta

Tener un comportamiento extraño en relación con el almacenamiento en caché en una aplicación ASP.NET 4 en IIS 7.5. He sido capaz de repetir el problema simplemente en otras configuraciones vacías, estoy seguro de que esto es un error, pero no está seguro de cómo informar a Microsoft.

A sitio en responde IIS a más de 1 de dominio, la aplicación .NET examins el nombre de host, y produce contenido en consecuencia. Por ejemplo, puede imprimir el nombre de la URL de la solicitud en una página en blanco. Por ejemplo, www.first-domain.com y www.second-domain.com

El web.config tiene el almacenamiento en caché apropiada, urlCompression, y compresión http todo resultó OFF bajo el nodo system.webServer.

La página aspx establece la cabecera de control de caché para el público, ya sea con una fecha futura para que expire, o un valor máximo de edad.

Visitar www.first-domain.com salidas de la página que se escribe correctamente 'www.first-domain.com'.

Sin embargo, visitar www.second-domain.com salidas de una página que escribe 'www.first-domain.com'.

El examen de las huellas de petición de fallidos, System.Web.Caching.OutputCacheModule ha encontrado la salida del cache (a pesar de que los archivos .config han convertido a la función de apagado), la caché ha igualado a pesar de que el nombre de host solicitud de URL son diferentes, y por lo tanto la segunda salida voluntad petición durante el tiempo que el max-edad / fecha de expiración se fija para, antes de la página correcta para el segundo dominio aparecerá los resultados de la primera solicitud a la diferente dominio.

De cualquier configuración de caché de control a lo privado, o retirar el módulo 'OutputCache' en los resuelve el problema web.config, manteniendo al mismo tiempo las cabeceras de control de caché correctos enviados al navegador, pero, obviamente, no puedo aprovechar kernel de almacenamiento en caché cuando lo necesito.

No puedo encontrar ninguna documentación de MSDN de cómo esté configurado el OutputCacheModule.

¿Alguien más ha experimentado este problema, ¿cómo puedo ir sobre la activación de la caché del núcleo y dejar que tome en cuenta el URL de nombre de host (sin separar la aplicación a diferentes sitios en IIS).

Gracias.

Actualización:

Adición SetSlidingExpiration no tiene ningún efecto, ya que la caché de kernel todavía almacena en caché la salida independientemente de la solicitud de nombre de host. El único escenario ahora es o bien desactivar la caché de resultados, o ejecutar una instancia duplicada de la aplicación en cada dominio se ejecutará - teniendo en cuenta la caída en el rendimiento del servidor esto resultaría en contra del aumento del rendimiento obtenido en el uso de la caché de resultados, decidimos para desactivar la caché de resultados para esta aplicación.

¿Fue útil?

Solución

Sin respuesta ha sido proporcionada después de 9 meses, y no se ha encontrado solución, una solución única, tal vez este problema se solucionará en la próxima versión de IIS mayor que 7,5 ...

-

Adición SetSlidingExpiration no tiene ningún efecto, ya que la caché de kernel todavía almacena en caché la salida independientemente de la solicitud de nombre de host. El único escenario ahora es o bien desactivar la caché de resultados, o ejecutar una instancia duplicada de la aplicación en cada dominio se ejecutará - teniendo en cuenta la caída en el rendimiento del servidor esto resultaría en contra del aumento del rendimiento obtenido en el uso de la caché de resultados, decidimos para desactivar la caché de resultados para esta aplicación.

Otros consejos

Yo estaba teniendo un problema muy similar y no hay soluciones aquí me ayudó.

TLDR :. Retirar con fuerza el módulo OutputCache en la Web.config fue la única solución que encontré

Mi escenario fue un poco diferente de bits.

Tengo CORS establecidos en Application_BeginRequest, respondiendo Access-Control-Allow-Origin para huéspedes específicos que me llaman (poniéndolo a * no ha sido fiable).

Mi controlador también establece Cache-control: public por sus respuestas.

Lo que encontré

Cada vez que me puse Cache-control: public, IIS fuerza almacena en caché la respuesta. Puntos de interrupción en cualquiera Application_BeginRequest o mi controlador no se vieron afectadas por segunda vez.

Desactivación de la producción y el almacenamiento en caché de núcleo mediante el Administrador de IIS como se ve debajo de tendría que pegarme los puntos de interrupción Application_BeginRequest, pero nunca me metió en el controlador. Algo seguía el almacenamiento en caché las respuestas. memoria caché de salida desactivada y el almacenamiento en caché del núcleo en inetmgr

Este artículo sugirió retirar el módulo de IIS OutputCache ayudaría.

<system.webServer>
  <modules runAllManagedModulesForAllRequests="true">
    <remove name="OutputCache" />
  </modules>
</system.webServer>

Si lo hace, me permitió golpeé controlador, por fin.

¿Qué le ayudaría aún más

Si alguien de MS o no podría brillar una luz si hay una manera de cambiar este comportamiento. OutputCache podría ser útil en algunas partes de una aplicación e innecesario en otros.

Cuidado

Tal vez soy (somos?) Resolver el problema equivocado aquí.

Tal vez IIS estaba apoderando de almacenamiento en caché en este escenario, ya que debería. Tal vez proxies a lo largo del camino entre mi servidor y el usuario se comportan exactamente igual que en ese mismo escenario, y si ese es el caso, entonces trabajar alrededor de este en IIS es incorrecta. Voy a tener que darse cuenta de eso y tal vez usted debería hacer lo mismo.

Tengo un problema similar. Yo uso regrabadora URL personalizada. Tengo páginas example.com/articles y example.com/art-ANY_ID.html. Tanto mapa url para articles.aspx (en el segundo ejemplo, como articles.aspx? Id = ANY_ID). Funcionó bien con ASP.NET 2.0 y modo de canalización clásico. Después de que hemos cambiado a ASP.NET 4 y el modo integrado, tenemos un comportamiento extraño: tanto la rentabilidad url idéntica salida. Era como cualquier página example.com/art-ANY_ID.html.

Ahora hemos eliminado <add extension=".html" policy="CacheUntilChange" kernelCachePolicy="CacheUntilChange" /> de la sección <caching enabled="true" enableKernelCache="true"> y que estaba bien obras. No entiendo por qué http.sys caché él.

Tener a encontrar ninguna explicación?

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