web-dev-qa-db-fra.com

Comment utiliser l'état de session ASP.NET dans un HttpHandler?

J'ai un HttpHandler qui est exécuté sur une page client (interdomaine, pas sur notre IIS, etc.) et quand ils cliquent sur notre lien intégré, il déclenche le gestionnaire sur notre serveur. Donc jusqu'à présent, tout fonctionne normalement.

J'essaie maintenant d'utiliser l'objet System.Web.HttpContext.Session mais il est nul. Je pense que c'est nul parce que nous n'avons pas de session tant que notre HttpHandler n'est pas appelé? Et plusieurs appels au gestionnaire créeront une nouvelle session par appel? Si tel est le cas, MS vient-il de désactiver l'objet Session lors de l'appel à un HttpHandler? Quelqu'un peut-il confirmer cela?

Si tel est le cas, que faites-vous pour maintenir l'état entre les appels? Une sorte d'objet de données basé sur SQL? Un fichier?

TIA

56
Keith Barrows

Demandez à votre HttpHandler d'implémenter l'interface IRequiresSessionState. Il permettra l'utilisation de l'état de session. IRequiresSessionState peut être trouvé dans le System.Web.SessionState espace de noms.

136
Michael Morton

Je pense que vous devez implémenter l'interface vide IReadOnlySessionState , donc le contexte sera chargé.

modifier pour ajouter:

Selon la réponse de Michael Morton, vous pouvez également implémenter IRequiresSessionState , ce qui vous donnera également un accès en écriture à l'objet Session

using System; 
using System.Web;
using System.Web.SessionState;
public class DownloadHandler : IHttpHandler, IReadOnlySessionState
{
   public bool IsReusable { get { return true; } }

   public void ProcessRequest(HttpContext context)
   {
       context.Response.Write(context.Session["kmx"]);
   }
}
8
KMX