2010-02-04 6 views
1

J'utilise le routage de System.Web.Routing sans MVC dans une application de projet d'application Web ASP.Net standard. Ceci est principalement fait pour obtenir des urls plus nettes dans le portail que nous développons (au lieu de ~/default.aspx? Contentid = 123 nous avons ~/{contentsubject} .Le portail n'est pas autorisé et toutes les informations sont dans l'url donc dans une mise en cache scénario que nous pouvons mettre en cache des pages complètesOutputcache ne fonctionne pas avec le routage

Lorsque j'ai essayé d'activer la mise en cache de sortie, j'ai remarqué qu'il n'y avait pas de mise en cache, il semble que la directive de page outputcache soit complètement ignorée, est-ce vrai ou est-ce que quelque chose me manque? ?

J'ai fait une petite application de test (j'uploadé à http://www.4shared.com/file/196605919/31903b07/OutputCacheTest.html) qui contient uniquement une page, Webform1.aspx, qui utilise une page maître et un contrôle de l'utilisateur. Tous les trois sorties de la date et l'heure.

Lorsque je demande http // localhost/OutputcacheTest/Webform1.aspx, la mise en mémoire cache de 10 secondes fonctionne comme prévu, c'est-à-dire que l'heure indiquée ne se met à jour que toutes les 10 secondes.

L'application définit également une route générique qui intercepte toutes les demandes et renvoie le même Webform1.aspx en tant que gestionnaire. Ainsi, lorsque vous demandez http // localhost/OutputcacheTest/myroute, la même page est exécutée, mais maintenant la mise en cache ne fonctionne pas, c'est-à-dire que l'heure actuelle est affichée à chaque requête.

Remarque: Lors de l'utilisation du serveur Web de développement intégré, les deux scénarios fonctionnent, seul IIS semble avoir ce problème.

Quelqu'un at-il une solution ou contourner pour activer la mise en cache de sortie dans ce scénario?

Répondre

1

J'ai obtenu ce travail en faisant les enregistrements de module et de gestionnaire exactement comme dans cet article (http://msdn.microsoft.com/en-us/magazine/dd347546.aspx).

Plus tôt, j'avais mes inscriptions dernière dans le bloc et maintenant je les ai déplacés vers le haut. J'ai aussi ajouté runAllManagedModulesForAllRequests attribut = "true" dans ce bloc
<system.webServer>
<validation validateIntegratedModeConfiguration="false" />
<modules runAllManagedModulesForAllRequests="true">

Alors maintenant OutputCache directive page fonctionne!

1

Vous avez maintenant besoin de l'attribut [OutputCache] sur vos actions de contrôleur. Avec les actions MVC, les résultats sont mis en cache (une variation par une valeur de paramètre est possible).

+0

Merci pour la réponse rapide. Le problème est que puisque je n'utilise pas MVC, seul le routage, je n'ai pas de OutputCacheAttribute puisque c'est dans l'espace de noms System.Web.Mvc. – MathiasR

+0

Dans ce cas, je ne suis pas sûr de ce que le bon plan d'action serait. Peut-être regarder dans le code source de MVC pour voir comment cela est fait et comment trouver la solution de contournement. –

Questions connexes