Sin enrutamiento, HttpContext.Current.Session
está allí, así que sé que el StateServer
está funcionando. Cuando ordeno mis solicitudes, HttpContext.Current.Session
es null
en la página enrutada. Estoy usando .NET 3.5 sp1 en IIS 7.0, sin las vistas previas de MVC. Parece que AcquireRequestState
nunca se dispara cuando se usan las rutas y, por lo tanto, la variable de sesión no se crea/completa.HttpContext.Current.Session es nulo cuando se enrutan solicitudes
Cuando intento acceder a las variables de sesión, me sale este error:
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>.
Durante la depuración, también me sale el error de que el HttpContext.Current.Session
no es accesible en este contexto.
-
Mi web.config
se parece a esto:
<configuration>
...
<system.web>
<pages enableSessionState="true">
<controls>
...
</controls>
</pages>
...
</system.web>
<sessionState cookieless="AutoDetect" mode="StateServer" timeout="22" />
...
</configuration>
Aquí está la aplicación IRouteHandler:
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;
}
}
También he intentado poner EnableSessionState="True"
en la parte superior de las páginas aspx pero aún así, nada.
¿Algún conocimiento? ¿Debo escribir otro HttpRequestHandler
que implemente IRequiresSessionState
?
Gracias.
Gracias por esto. Resolvió mi problema muy bien, ya que resultó que el servidor de producción lo necesitaba pero no la máquina de desarrollo. – Raithlin
¡Eso es ins @ ne! Gracias. Esto corrigió la eliminación de los valores de mi "TempData" (maquinilla de mvc) (ya que TempData usa Session). Holy Moly. – granadaCoder
Tengo el problema de la desaparición de los valores de TempData, pero esto no lo resolvió. – Dinei