2009-08-28 4 views
1

J'ai du mal à trouver des informations à ce sujet, ce qui me fait penser que je fais quelque chose de mal. J'ai fait un ashx qui sert des images sécurisées à nos utilisateurs connectés. Le problème est qu'une trace Sql Profiler révèle que TempResetTimeout est appelée dans notre DB d'état de session pour chaque image diffusée via ce mécanisme. Ce ashx a été construit pour remplacer un aspx qui avait l'habitude de faire la même chose mais qui causait beaucoup d'interblocages de db de session de l'état de session en raison de beaucoup d'images et de l'utilisation de jardin de Web, yada, yada. C'est certainement une amélioration, en raison d'un appel "Read Committed" moins à l'état de session db, mais le fait qu'il y ait une mise à jour signifie que nous pouvons toujours avoir des blocages. Fondamentalement, nous ne voulons pas du tout d'interaction de session de l'utilisation de cet ashx, mais cela ne semble pas se produire.Comment empêcher ashx de réinitialiser le délai de session?

Je n'ai certainement pas implémenté l'interface IRequiresSessionState, donc je suis amené à croire que mon ashx ne devrait pas toucher Session de quelque manière que ce soit. Je vois Global.asax hit pour chaque occurrence cependant, et Global.asax référence la session dans une partie de son code. Cela m'a amené à essayer d'exclure cette page particulière de toute sorte d'authentification par ce qui suit dans web.config ...

<location path="ImageHandler.ashx"> 
<system.web> 
    <authentication mode="None" /> 
</system.web> 
</location> 

... mais cela provoque le ashx de ne pas tirer du tout (pas d'image affichée et aucun point d'arrêt n'a été atteint dans ProcessRequest). Je ne suis pas sûr de ce qui se passe.

Comment puis-je faire en sorte que ashx ImageHandler ne touche pas la session AT ALL?

+0

Ce serait bien si je pouvais empêcher Global.asax d'être appelé quand ce ashx est référencé, mais je ne sais pas comment le faire, ou si c'est même possible. –

+0

Toujours bloqué sur ce –

+0

Notez que IRequiresSessionState et IReadOnlySessionState ne parlent que des 'valeurs d'état de session' et c'est tout. Nulle part il ne dit qu'il ne lira pas le cookie de session et chargera la session pour la demande de page donnée (et donc réinitialisera le timeout). –

Répondre

2

SessionState est mis en place au niveau de l'application, la seule façon de désactiver la session pour toute demande ASP.NET est de le mettre dans sa propre application dans IIS et tourner l'état de session hors tension.

<system.web> 
    <sessionState mode="Off" /> 
</system.web> 

http://msdn.microsoft.com/en-us/library/h6bb9cz9.aspx

Vous pouvez également créer votre propre module d'état de session (peut-être essayer d'envelopper l'existant), mais aussi serait soit nécessiter une configuration IIS pour configurer un autre dossier comme une application, ou le remplacement sur votre application racine.

http://msdn.microsoft.com/en-us/library/system.web.sessionstate.sessionstatemodule.aspx

Bien que tout semble beaucoup plus d'efforts que de le mettre hors tension pour un sous-dossier qui est configuré comme une application dans IIS.

+0

Configurer le dossier contenant mon ashx en tant qu'application et désactiver la session pour cette application me semble être la bonne façon de procéder. Merci de votre aide. –

Questions connexes