2010-09-08 6 views
1

J'ai le code suivant qui était ok jusqu'à ce que quelqu'un d'autre mette un autre code dans le site qui sorta muck it up maintenant.MVC ASP.net session est null

Ceci est mon code:

var existingContext = HttpContext.Current; 
var writer = new StringWriter(); 
var response = new HttpResponse(writer); 
var context = new HttpContext(existingContext.Request, response) { User = existingContext.User }; 
HttpContext.Current = context; 
HttpContext.Current.SetSessionStateBehavior(System.Web.SessionState.SessionStateBehavior.Default); 
HttpContext.Current.Session["Test"] = "test"; 
for (Int32 i = 0; i < existingContext.Session.Count; i++) 
{ 
    HttpContext.Current.Session.Add(existingContext.Session.Keys[i], existingContext.Session[i]); 
} 

L'idée sous-jacente est de pouvoir capturer la sortie d'une vue et le rendre au format pdf. Maintenant, mon seul problème est que lorsque j'attribue un contexte à HttpContext.Current, la session est nulle. J'ai besoin de pouvoir initialiser la session pour pouvoir y assigner des variables.

Je vais aussi ajouter que cela est dans une classe statique

public static class ControllerExtensions 

Des indices?

+0

désolé la chose vue de code mucked un peu ou je l'ai fait quelque chose de mal le code devrait être: –

+0

var existingContext = HttpContext.Current; var writer = new StringWriter(); var réponse = new HttpResponse (writer); var context = new HttpContext (existingContext.Request, réponse) {Utilisateur = existingContext.User}; HttpContext.Current = context; HttpContext.Current.Session ["Test"] = "test"; pour (Int32 i = 0; i

Répondre

1

Il me semble avoir résolu le problème pour maintenant et qui était de supprimer les lignes:

  var context = new HttpContext(existingContext.Request, response) { User = existingContext.User }; 
     HttpContext.Current = context; 
     HttpContext.Current.Request. 
     for (Int32 i = 0; i < existingContext.Session.Count; i++) 
     { 
      HttpContext.Current.Session.Add(existingContext.Session.Keys[i], existingContext.Session[i]); 
     } 
1

Si cela se produit à l'intérieur d'un HttpHandler, vous devez ajouter l'interface IRequiresSessionState à votre gestionnaire pour la session disponible -

 
public class HttpPdfWriteHandler : IHttpHandler, IRequiresSessionState { 
    [...] 
} 

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

+0

malheureusement cela se produit dans une classe statique public static class ControllerExtensions –

+0

J'ai obtenu le code original de: http://www.jimzimmerman.com/blog/2009/10/06/PdfResult+A+Custom+ActionResult + En + ASPNET + MVC.aspx et http://jamesmcc.wordpress.com/2010/06/02/pdfresult-a-custom-actionresult-in-asp-net-mvc2-updated/ –

0

1) Démarrer-> Outils d'administration -> services

2) cliquez droit sur le service d'état ASP.NET, puis cliquez sur « Démarrer »

*, vous pouvez en outre définir le service en mode automatique afin qu'il fonctionnera après un redémarrage.

Pour plus de détails vous pouvez consulter mon blog: http://jamshidhashimi.com/2011/03/16/unable-to-make-the-session-state-request-to-the-session-state-server/ ref: Unable to make the session state request to the session state server