Question

Avoir un comportement étrange en ce qui concerne la mise en cache de sortie dans une application ASP.NET 4 sur IIS 7.5. Je suis en mesure de répéter le problème simplement sur d'autres configurations vides, je suis certain que c'est un bug, mais ne savez pas comment le signaler à Microsoft.

Un site dans IIS répond à plus d'une catégorie, l'application .NET examine la question de nom d'hôte, et produit contenu en conséquence. Par exemple, il peut imprimer le nom de l'URL de la requête dans une page blanche. Par exemple, www.first-domain.com et www.second-domain.com

Le web.config a la mise en cache appropriée, urlCompression et httpCompression tout doit être désactivée sous le nœud system.webServer.

La page ASPX définit l'en-tête de contrôle du cache pour le public, soit une date ultérieure pour l'expiration, ou une valeur max-age.

Visiter la page www.first-domain.com sorties qui écrit avec succès 'www.first-domain.com'.

Cependant, la visite d'une page www.second-domain.com sorties qui écrit 'www.first-domain.com'.

L'examen des failed-demande-traces, System.Web.Caching.OutputCacheModule a trouvé la sortie en cache (même si les fichiers .config ont tourné la fonction d'arrêt), le cache est adapté, même si le nom d'hôte d'URL de demande sont différents, et donc la deuxième sortie de la volonté de demande les résultats de la première requête au domaine différent pour aussi longtemps que le max-age / expiration a été fixée pour, avant que la page correcte pour le deuxième domaine apparaît.

au privé, ou la suppression soit mise en cache de contrôle module « OutputCache » dans le web.config permet de résoudre le problème, tout en maintenant les en-têtes de contrôle du cache corrects envoyés au navigateur, mais évidemment, je ne peux pas profiter de la mise en cache du noyau quand je en ai besoin.

Je ne peux pas trouver toute la documentation MSDN sur la façon dont le OutputCacheModule est configuré.

Quelqu'un at-il connu d'autre cette question, comment puis-je aller sur l'activation de la mise en cache du noyau et laissez-le prendre en compte URL hostname (sans séparer l'application de différents sites dans IIS).

Merci.

Mise à jour:

Ajout SetSlidingExpiration n'a pas d'effet, comme le cache Kernal met en cache toujours la sortie quel que soit le nom d'hôte de demande. Le seul scénario est maintenant soit désactiver la mise en cache de sortie, ou exécuter une instance en double de l'application sur chaque domaine il fonctionnera - compte tenu de la baisse des performances du serveur cela se traduirait par rapport à l'augmentation de la performance acquise dans la mise en cache de sortie, nous avons décidé pour désactiver la mise en cache de sortie pour cette application.

Était-ce utile?

La solution

Aucune réponse n'a été fournie au bout de 9 mois, et aucune solution n'a été trouvée, seule une solution, peut-être cela sera corrigé dans la prochaine version d'IIS supérieur à 7,5 ...

-

Ajout SetSlidingExpiration n'a pas d'effet, comme le cache Kernal met en cache toujours la sortie quel que soit le nom d'hôte de demande. Le seul scénario est maintenant soit désactiver la mise en cache de sortie, ou exécuter une instance en double de l'application sur chaque domaine il fonctionnera - compte tenu de la baisse des performances du serveur cela se traduirait par rapport à l'augmentation de la performance acquise dans la mise en cache de sortie, nous avons décidé pour désactiver la mise en cache de sortie pour cette application.

Autres conseils

J'avais un problème très semblable et aucune solution ici m'a aidé.

TLDR :. Le module avec force la suppression de OutputCache sur la Web.config était la seule solution que j'ai trouvé

Mon scénario était un autre petit peu.

Je CORS mis en place dans Application_BeginRequest, répondant Access-Control-Allow-Origin pour les hôtes spécifiques qui me appellent (la mise à * n'a pas été fiable).

Mon contrôleur définit également Cache-control: public pour les réponses est tout.

Ce que je trouve

Chaque fois que je mets Cache-control: public, IIS met en cache avec force la réponse. Les points d'arrêt sur les deux Application_BeginRequest ou mon contrôleur n'a jamais été frappé une deuxième fois.

Désactivation de la sortie et la mise en cache du noyau via IIS Manager vu ci-dessous me ferait frapper les points d'arrêt de Application_BeginRequest, mais ne m'a jamais entré dans le contrôleur. Quelque chose a été mise en cache toujours des réponses. la mise en cache de sortie désactivé et la mise en cache noyau sur inetmgr

Cet article a suggéré de supprimer le module OutputCache d'IIS serait utile.

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

Ce faisant, m'a permis de frapper mon contrôleur, enfin.

Ce qui aiderait encore plus

Si quelqu'un de MS ou ne pouvait pas briller une lumière s'il y a un moyen de changer ce comportement. OutputCache pourrait être utile dans certaines parties d'une application et inutile dans d'autres.

Attention

Peut-être que je suis (nous sommes?) Résoudre le mauvais problème.

Peut-être que IIS a été pris sur la mise en cache dans ce scénario parce qu'il devrait. Peut-être proxies le long du chemin entre mon serveur et l'utilisateur se comporteraient comme ça dans ce scénario exact, et si tel est le cas de travail puis autour de cela sur IIS est erroné. Je dois comprendre cela et peut-être vous devriez aussi.

J'ai le même problème. J'utilise rewriter url personnalisé. J'ai pages example.com/articles et example.com/art-ANY_ID.html. Les deux carte URL pour articles.aspx (dans cet exemple comme articles.aspx? Id = ANY_ID). Il a bien fonctionné avec ASP.NET 2.0 et le mode de conduite classique. Après nous avons changé pour ASP.NET 4 et le mode intégré, nous avons eu un comportement étrange: à la fois retour url sortie identique. Il était une page comme example.com/art-ANY_ID.html.

Nous avons retiré <add extension=".html" policy="CacheUntilChange" kernelCachePolicy="CacheUntilChange" /> de la section <caching enabled="true" enableKernelCache="true"> et elle de belles œuvres. Je comprends pas pourquoi il cache http.sys.

Avez-vous trouvé des explications?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top