Artigo: 316148 - Última revisão: quinta-feira, 23 de Fevereiro de 2006 - Revisão: 4.3

PROBLEMA: Variáveis de sessão são perdidas intermitentemente nas aplicações do ASP.NET

Dica do SistemaEste artigo aplica-se a um sistema operativo diferente do que está a utilizar. Foi desactivado o conteúdo do artigo, que pode não ser relevante para si.

Nesta página

Expandir tudo | Reduzir tudo

Sintomas

Variáveis de sessão podem perder intermitentemente nas aplicações do Microsoft ASP.NET.

Quando este problema ocorre num cluster do Microsoft Application Center 2000, as sessões removerá no controlador de quando o software antivírus analisa a Web.config ou os ficheiros de global.asax. A digitalização irá desencadear uma replicação, fazendo com que as sessões perder em cada servidor membro por sua vez, o ficheiro é substituído.

Causa

Existem várias causas possíveis para este problema. Este artigo aborda uma causa possível: sessão dados perdidos devido a actividade de software anti-vírus.

Este problema pode ocorrer quando o software antivírus analisa os ficheiros de aplicação Web. Durante o processo de digitalização, o software antivírus poderá assinalar o global.asax, o Web.config e/ou ficheiros Machine.config como modificadas. Esta modificação solicita o reinício do Microsoft .NET Framework a aplicação da Web. Se os dados da sessão estiverem armazenado em processo, todos os dados da sessão perde-se sempre que uma aplicação Web for reiniciada.

Resolução

Para resolver este problema, utilize um dos seguintes métodos:
  • Configure o software antivírus para que não pesquisa ficheiros .asax e .config.
  • Contacte o fabricante do software antivírus para obter instruções.
  • Configure a aplicação Web para armazenar dados de sessão out-of-process.Para obter mais informações, clique no número de artigo que se segue para visualizar o artigo na Microsoft Knowledge Base:
    307598  (http://support.microsoft.com/kb/307598/ ) Descrição geral de gestão de estado do ASP.NET

Ponto Da Situação

Este comportamento ocorre por predefinição.

Mais Informação

Passos para reproduzir o comportamento

Nota Este exemplo assume que a aplicação Web armazena sessão dados dentro do processo (que é o comportamento predefinido).
  1. Siga estes passos para criar uma aplicação Web no Microsoft Visual Basic. NET:
    1. Abra o Microsoft Visual Studio .NET.
    2. No menu ficheiro , aponte para Novo e, em seguida, clique em projecto .
    3. Na caixa de diálogo Novo projecto , clique em Projectos do Visual Basic em Project Types e, em seguida, clique em ASP.NET Web Application em modelos .
    4. Na caixa de texto localização , escreva http://localhost/TestWeb1 .
    5. Clique em OK para criar o projecto. WebForm1.aspx é adicionado ao projecto por predefinição.
  2. Na janela Solution Explorer, clique com o botão direito do rato em WebForm1.aspx e, em seguida, clique em Código .
  3. Adicione o seguinte código ao procedimento de evento Page_Load :
    Response.Write("<b>Session Variable Test</b><br>&#xa0;<br>")
    If IsNothing(Session("TestVal")) Then
        Response.Write("TestVal old value: <b>nothing</b>")
        Session("TestVal") = 0
    Else
        Response.Write("TestVal old value: " & Session("TestVal"))
    End If
    Session("TestVal") += 1
    Response.Write("<br>TestVal new value: " & Session("TestVal"))
    					
  4. No menu criar , clique em Criar soluções .
  5. Na janela Solution Explorer, clique com o botão direito do rato em WebForm1.aspx e, em seguida, clique em View in browser .
  6. No browser, clique em Actualizar . Note que a página apresenta o valor inicial da variável de sessão como nada .
  7. Clique em Actualizar novamente várias vezes. Repare que o valor inicial da variável de sessão é alterado para um número aumenta sempre que actualizar a página.
  8. Deixe a página aberta no browser.
  9. No bloco de notas, abra o ficheiro global.asax da pasta do projecto. O ficheiro global.asax deste projecto TestWeb1 normalmente está localizado na pasta C:\Inetpub\wwwroot\TestWeb1\Global.asax.
  10. Mova o ponto de inserção para uma linha em branco no ficheiro global.asax e, em seguida, prima ENTER para adicionar uma segunda linha em branco. Tem de efectuar este passo para assinalar o ficheiro como tendo sido modificados.
  11. Guarde as alterações ao ficheiro global.asax.
  12. No browser, clique em Actualizar novamente. Note que a variável de sessão TestVal apresenta um valor inicial de nada . As variáveis da sessão dentro do processo são perdidas.

Referências

Para obter mais informações, clique números de artigo que se seguem para visualizar os artigos na base de dados de conhecimento da Microsoft:
303881  (http://support.microsoft.com/kb/303881/ ) PROBLEMA: Variáveis de sessão são perdidas em aplicações Web ASP
317604  (http://support.microsoft.com/kb/317604/ ) Como configurar o SQL Server para armazenar o estado da sessão ASP.NET
871042  (http://support.microsoft.com/kb/871042/ ) Por que razão está a reiniciar a aplicação do ASP.NET?

A informação contida neste artigo aplica-se a:
  • Microsoft ASP.NET 1.1
  • Microsoft ASP.NET 1.0
Palavras-chave: 
kbmt kbcaching kbconfig kbprb kbstate kbsysadmin KB316148 KbMtpt
Tradução automáticaTradução automática
IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine translation ou MT), não tendo sido portanto revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática? erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 316148  (http://support.microsoft.com/kb/316148/en-us/ )