2010-03-11 8 views
5

Est-il possible de mettre en cache la réponse d'un gestionnaire http sur le serveur et sur le client?Mise en cache de la réponse d'un serveur du gestionnaire HTTP ASP.NET et du côté client

Cela ne semble pas faire l'affaire:

_context.Response.Cache.SetCacheability (HttpCacheability.Public); _context.Response.Cache.SetExpires (DateTime.Now.AddDays (7)); Le contexte _context est le HTTPContext transmis en tant qu'argument à la méthode ProcessRequest dans l'implémentation IHttpHandler.

Des idées?

Mise à jour: Le client met en cache les images qui sont chargées via httphandler, mais si un autre client fait le même appel, le serveur ne l'a pas mis en cache. Donc, pour chaque client qui demande l'image, le serveur va à la base de données (et filestream). Si nous utilisons une page aspx au lieu d'un httphandler avec un profil de mise en cache, les images sont mises en cache à la fois sur le client et sur le serveur.

+0

Avez-vous essayé d'utiliser Fiddler afin de vérifier que les en-têtes sont vraiment dans le paquet reçu sur le client? – Timores

+0

@Timores Le client met en cache les appels au gestionnaire, mais si un autre client effectue le même appel, le serveur ne le cache pas. –

Répondre

3

Merci pour votre réponse dans les commentaires. Cache.SetCacheability est utilisé pour définir si un proxy ou le client est autorisé à mettre en cache, pas sur le serveur.

Jetez un oeil à IIS 7 où il est expliqué comment mettre en cache la sortie d'un gestionnaire HTTP sur le serveur.

+0

Thx, Timores, on va vérifier ça! Etrange qu'avec une page aspx, vous pouvez mettre en cache au niveau du serveur, mais avec un niveau d'utilisateur, vous devez le faire dans IIS (ou est-ce que je sauvegarde les changements dans le fichier web.config?) –

4

Avec IIS7, cela peut être fait dans web.config.

Par exemple, supposons que votre url ashx est:

/ashxfiles/myhandler.ashx

... et que vous voulez varier en fonction queryString params:

id , lang

Ajoutez ce qui suit à votre fichier 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> 

Cette règle s'applique à tous les fichiers .ashx dans le répertoire, vous voudrez peut-être mettre vos fichiers dans des dossiers séparés .ashx si vous avez besoin de contrôle plus granulaire des paramètres du cache.

Questions connexes