O objeto de sessão é nulo no aplicativo da web do asp.net MVC 4, uma vez implantado no IIS 7 (W 2008 R2)
Eu desenvolvi um aplicativo da Web ASP.NET MVC 4 (.net 4.5) que funciona bem no Visual Studio 2012. Após a implantação no IIS 7 no Windows Server 2008 R2, parece que o objeto HttpContext.Session dentro do meu controlador é nulo. Eu criei um aplicativo ASP.NET MVC 4 de teste simples para demonstrar o problema.
No meu aplicativo de teste eu tenho um simples Home Controller
public class HomeController : Controller
{
public ActionResult Index()
{
if ( HttpContext != null && HttpContext.Session != null )
{
HttpContext.Session[ "test" ] = "a string in session state";
ViewBag.Info = HttpContext.Session[ "test" ];
return View();
}
else
{
if ( HttpContext == null )
{
ViewBag.Info = "beeeeuuuuu - HttpContext = null!!!";
}
else if ( HttpContext.Session == null )
{
ViewBag.Info = "beeeeuuuuu - Session = null!!!";
}
return View();
}
}
}
Minha visão Index.chtml parece algo como isto:
@{
ViewBag.Title = "Index";
}
<h2>Index</h2>
This is a simple test
<p>@ViewBag.Info</p>
Então, quando eu executo o aplicativo, recebo o que eu esperava:
Index
This is a simple test
a string in session state
Mas depois de implantar o aplicativo no servidor da Web, o site me fornece a seguinte página indicando que o objeto Session é nulo:
Index
This is a simple test
beeeeuuuuu - Session = null!!!
O aplicativo da Web é implantado no site padrão que é executado no pool de aplicativos do ASP.NET v4.0 (pipeline integrado).
Eu já reinstala o ASP.NET no servidor usando aspnet_regiis -ir, mas isso não ajudou. O estado da sessão é ativado (em proc) no servidor ISS. Espero que alguém possa me ajudar aqui porque estou tentando resolver isso há algum tempo.
Muito obrigado antecipadamente e cumprimentos.
ATUALIZAÇÃO: Eu também testei uma compilação ASP.NET MVC 4 com o .NET 4.0 em vez de 4.5 e que tem o mesmo problema. Eu também implantei um aplicativo ASP.NET Web Pages (.NET 4.0) e funciona bem (O HttpContext.Current.Session não é nulo no código por trás).
UPDATE II: Eu também tentei armazenar o estado da sessão em um banco de dados, que funcionou bem na minha máquina de desenvolvimento, mas teve o mesmo problema no servidor de produção (HttpContext.Session ainda retorna null).