Na teoria, a propriedade SessionID deste objeto deveria ter o mesmo valor para a sessão. Mas não é o que estava acontecendo com os meus testes no ASP.NET MVC 3.
Todo request que eu fazia em uma View o SessionID era diferente.
Depois de algumas buscas na internet encontrei uma solução.
Para resolver este problema tive que implementar o método Session_Start no Global.asax, para que ele não execute o Session_Start da classe base do ASP.NET e mantenha o mesmo SessionID para cada sessão.
public void Session_Start(object sender, EventArgs e)
{
}
Estamos acostumados a utilizar o Microsoft Visual Studio para gerar um projeto ASP.NET e esquecemos de algumas coisas que ele faz automaticamente para nós, como a criação do Global.asax e a implementação dos métodos Application_Start, Session_Start, Application_BeginRequest, Application_AuthenticateRequest, Application_EndRequest, Application_Error, Session_End e Application_End, no qual ao criar um projeto ASP.NET MVC 3.0 ele somente cria o método Application_Start para registrar o MVC 3.0.
Sr. Seninha,
ResponderExcluirSó faltou falar o porque que isso acontece, vamos lá.
Se utilizar o estado de sessão baseado no Cookie (que é o mais utilizado), o ASP.NET não alocará uma espaço de memória até que a mesma seja utilizada, ou seja, enquanto você não armazenar nada na sessão o SessionID vai mudar, a não ser que você altere o Global.asax como você demonstra no post.
Isso só vai ser necessário se você precisar de um SessionID estatico para a sua aplicação.
Abraços
Olá,
ResponderExcluirEu tenho uma aplicação feita em ASP.net, e depois que mudei para o IIS7 o Session.SessionID muda a cada página. Isso não acontecia nas versões anterios do IIS.
Existe algo que eu possa fazer para funcionar também no IIS. No meu caso, eu preciso que o Session.SessionID seja mantido.
Grato.
Roni.
Caro Roni,
ResponderExcluirExiste um item novo no Application Pool do IIS7, que tem o nome de "Managed pipeline mode", nele você tem duas opções, Integrated e Classic.
O Classic irá rodar a aplicação web com o mesmo contexto da versão do IIS6, ou seja, irá utilizar o "Aspnet_isapi.dll" e não a versão nova que é rodada ao utilizar a opção Integrated.
Tente alterar este pipeline do application pool de sua aplicação para "Classic" e veja se funciona.
Caro João,
ResponderExcluirInfelizmente esta opção já está configurada.
Existe algo mais para se fazer?
Grato.
Roni.
Roni,
ResponderExcluirVamos tentar com a opção "Integrated" do Application Pool e verifique se no seu web.config existe a tag system.webServer (conforme exemplo abaixo), que é utilizada pelo IIS 7.
<system.webServer>
<validation validateIntegratedModeConfiguration="false"/>
<modules runAllManagedModulesForAllRequests="true"/>
</system.webServer>