Ohne Routing, HttpContext.Current.Session
ist da, so dass ich weiß, dass die StateServer
funktioniert. Wenn ich meine Anfragen route, ist HttpContext.Current.Session
null
in der gerouteten Seite. Ich verwende .NET 3.5 SP1 auf IIS 7.0, ohne die MVC-Vorschauen. Es scheint, dass AcquireRequestState
nie ausgelöst wird, wenn die Routen verwendet werden, und daher wird die Sitzungsvariable nicht instanziiert/gefüllt.HttpContext.Current.Session ist null, wenn Anfragen weitergeleitet werden
Wenn ich versuche, die Session-Variablen zuzugreifen, bekomme ich diesen Fehler:
base {System.Runtime.InteropServices.ExternalException} = {"Session state can only be used when enableSessionState is set to true, either in a configuration file or in the Page directive. Please also make sure that System.Web.SessionStateModule or a custom session state module is included in the <configuration>.
Während des Debuggens, erhalte ich auch den Fehler, dass die HttpContext.Current.Session
in diesem Zusammenhang nicht zugänglich ist.
-
Mein web.config
sieht wie folgt aus:
<configuration>
...
<system.web>
<pages enableSessionState="true">
<controls>
...
</controls>
</pages>
...
</system.web>
<sessionState cookieless="AutoDetect" mode="StateServer" timeout="22" />
...
</configuration>
Hier ist die IRouteHandler Umsetzung:
public class WebPageRouteHandler : IRouteHandler, IRequiresSessionState
{
public string m_VirtualPath { get; private set; }
public bool m_CheckPhysicalUrlAccess { get; set; }
public WebPageRouteHandler(string virtualPath) : this(virtualPath, false)
{
}
public WebPageRouteHandler(string virtualPath, bool checkPhysicalUrlAccess)
{
m_VirtualPath = virtualPath;
m_CheckPhysicalUrlAccess = checkPhysicalUrlAccess;
}
public IHttpHandler GetHttpHandler(RequestContext requestContext)
{
if (m_CheckPhysicalUrlAccess
&& !UrlAuthorizationModule.CheckUrlAccessForPrincipal(
m_VirtualPath,
requestContext.HttpContext.User,
requestContext.HttpContext.Request.HttpMethod))
{
throw new SecurityException();
}
string var = String.Empty;
foreach (var value in requestContext.RouteData.Values)
{
requestContext.HttpContext.Items[value.Key] = value.Value;
}
Page page = BuildManager.CreateInstanceFromVirtualPath(
m_VirtualPath,
typeof(Page)) as Page;// IHttpHandler;
if (page != null)
{
return page;
}
return page;
}
}
Ich habe auch an der Spitze der aspx Seiten zu setzen EnableSessionState="True"
versucht aber immer noch nichts.
Irgendwelche Einsichten? Sollte ich einen anderen HttpRequestHandler
schreiben, der IRequiresSessionState
implementiert?
Danke.
Danke dafür. Es löste mein Problem gut - wie es sich herausstellte, brauchte der Produktionsserver es, aber nicht die Dev-Maschine. – Raithlin
Das ist ins @ ne! Vielen Dank. Dadurch wurden meine Werte für "TempData" (mvc razor) ebenfalls behoben (da TempData Session verwendet). Heiliger Moly. – granadaCoder
Ich habe das Problem der TempData-Werte verschwinden, aber das hat es nicht gelöst. – Dinei