CORRECÇÃO: Referências a objetos STA armazenados no estado de sessão podem se tornar corrompidas se eles são chamados de um evento Session_End

Traduções deste artigo Traduções deste artigo
ID do artigo: 827164 - Exibir os produtos aos quais esse artigo se aplica.
Aviso
Para uma versão deste artigo do Microsoft .NET Framework 1.0, consulte 827163.
Este artigo foi arquivado. É oferecido "como está" e não será mais atualizado.
Expandir tudo | Recolher tudo

Neste artigo

Sintomas

Se você armazenar suas referências a objetos de single-threaded apartment (STA) no estado de sessão e você definir o atributo AspCompat para true , as referências podem estar corrompidas ou podem se tornar perdidas quando você tenta obter acesso aos objetos do evento Session_End .

Observação Normalmente, esse problema pode ocorrer se você executar o aplicativo sob cargas altas ou se você usar uma ferramenta de estresse como o Application Center Test (ACT) quando você executar o aplicativo. Quando esse problema ocorre, você recebe uma "0x8004e005 erro" mensagem de erro no log de eventos.

Causa

O problema ocorre porque o evento Session_End não tem que ser executado no mesmo thread que a sessão foi criada no. Como o objeto STA não está no mesmo thread que a sessão foi criada no, empacotamento é necessária para acessar o objeto. Esse comportamento causa lentidão no desempenho.

Você pode armazenar objetos STA no estado de sessão. No entanto, a Microsoft não recomenda que você faça isso. Para obter mais informações, consulte a seção "Referências" deste artigo.

Resolução

Esse hotfix adiciona uma nova configuração para o arquivo Machine.config. Depois de instalar o hotfix, a seguinte configuração de aplicativo está disponível.
<httpRuntime apartmentThreading=?true|false? />,
por padrão, apartmentThreading é definida como false . Se você definir apartmentThreading como true , ocorrerá o seguinte comportamento:
  • Todos os eventos Session_Start executado em threads STA que correspondem para a identificação da sessão, independentemente da página de destino ou o manipulador.
  • Todos os eventos Session_End executados em threads STA que correspondem para a identificação de sessão.
  • AspCompat torna-se definido como true para todas as páginas, exceto para as páginas com AspCompat explicitamente definida como false .
Observação Você ainda pode executar o evento Session_Start no thread STA após aplicar esse hotfix se apartmentThreading é definida como false e AspCompat está definida como true para a página de destino.

Esse hotfix funciona para objetos STA que são armazenados diretamente no estado de sessão. Esse hotfix também funciona para um objeto STA que está aninhada um nível de profundidade como um objeto .NET que é armazenado no estado da sessão e que tem uma referência a um objeto STA. No entanto, esse hotfix não funciona para objetos STA que são armazenados mais nível profundo.

importante Esse hotfix contém dois tipos de pacotes: um pacote do Microsoft Windows Installer e um pacote Gerenciador de componentes opcionais (OCM). Se você usar o Microsoft Windows Server 2003, você deve especificar que você exija a atualização do Windows Server 2003 (OCM), porque a proteção de arquivo do Windows Server 2003 monitora os arquivos do .NET Framework 1.1. Se você usar um sistema operacional diferente do Windows Server 2003, você deve continuar a usar o pacote do Windows Installer.

A versão OCM deste hotfix está disponível nos seguintes idiomas:
  • Inglês (PTB)
  • Japonês (JPN)
  • Alemão (PTB)
  • Francês (FRN)
Um hotfix suportado agora está disponível da Microsoft, mas destina-se somente a corrigir o problema descrito neste artigo. Aplique-o somente nos sistemas que apresentarem esse problema específico. Esta correcção poderá submetida a testes adicionais. Portanto, se você não tiver sido gravemente afetado por esse problema, recomendamos que você aguarde o próximo service pack do Microsoft .NET Framework 1.1 que contém esse hotfix.

Para resolver esse problema imediatamente, contate o Atendimento Microsoft para obter o hotfix. Para obter uma lista completa de telefones do Atendimento Microsoft e informações sobre os custos de suporte da, visite o seguinte site:
http://support.microsoft.com/contactus/?ws=support
Observação Em alguns casos, as taxas cobradas pelas ligações para chamadas de suporte podem ser canceladas se um profissional de suporte da Microsoft determinar que uma atualização específica resolverá o problema. Os custos normais de suporte serão aplicados a questões e problemas que não se qualificam à atualização específica em questão de suporte adicionais.

A versão em inglês deste hotfix apresenta os atributos de arquivo (ou posteriores) listados na tabela a seguir. As datas e horas desses arquivos são listadas na acordo hora universal coordenada (UTC). Quando você exibe as informações do arquivo, ele é convertido para a hora local. Para encontrar a diferença entre o UTC e a hora local, use a guia fuso horário na ferramenta Data e hora no painel de controle.
   Date         Time   Version       Size       File name
   ------------------------------------------------------------------------
   18-Sep-2003  05:18  1.1.4322.947    258,048  Aspnet_isapi.dll
   18-Sep-2003  05:18  1.1.4322.947     20,480  Aspnet_regiis.exe
   18-Sep-2003  05:18  1.1.4322.947     32,768  Aspnet_state.exe
   18-Sep-2003  05:18  1.1.4322.947     32,768  Aspnet_wp.exe
   16-May-2003  01:49                   33,522  Installpersistsqlstate.sql
   16-May-2003  01:49                   34,150  Installsqlstate.sql
   18-Sep-2003  05:09  1.1.4322.947     94,208  Perfcounter.dll
   19-Sep-2003  02:43  1.1.4322.947  1,216,512  System.dll
   19-Sep-2003  02:40  1.1.4322.947    323,584  System.runtime.remoting.dll
   19-Sep-2003  02:43  1.1.4322.947  1,253,376  System.web.dll
   19-Sep-2003  02:42  1.1.4322.947    819,200  System.web.mobile.dll
   19-Sep-2003  02:41  1.1.4322.947    569,344  System.web.services.dll
   19-Sep-2003  02:44  1.1.4322.947  1,335,296  System.xml.dll
   18-Sep-2003  05:13                   14,472  Webuivalidation.js

Situação

A Microsoft confirmou que este é um problema nos produtos da Microsoft que estão listados na seção "Aplica-se a" deste artigo.

Mais Informações

Este pacote de hotfix também inclui um hotfix secundário. Se você definir AspCompat para true e você definir um objeto STA que é armazenado no estado da sessão nula , você receberá uma mensagem de erro "NullReferenceException" quando você recarregar a página. Para reproduzir o problema secundário, cole o seguinte código dentro de um evento Page_Load .
	Session["obj"] = new Object();

	Session["obj"] = null;
quando visitar essa página na primeira vez, o código funciona corretamente. No entanto, se você recarregar a página, você recebe uma mensagem de erro "NullReferenceException" do Microsoft ASP.NET e você não pode exibir a página novamente na sessão atual.

Rastreamento de pilha:
[NullReferenceException: Object reference not set to an instance of an object.]
System.Web.UnsafeNativeMethods.AspCompatOnPageStart(Object obj) +0
System.Web.Util.AspCompatApplicationStep.OnPageStartSessionObjects() +90
System.Web.UI.Page.ProcessRequestMain() +44
se você definir AspCompat como false , esse comportamento não ocorre.

Passos para reproduzir o problema

Para reproduzir o problema aparece na seção "Sintomas" deste artigo, execute essas etapas:
  1. Use o Microsoft Visual Basic .NET para criar um objeto do Visual Basic ActiveX DLL.

    Observação Se você marcar o componente como Unattended Execution (UE), o erro ainda ocorrer.
  2. Crie duas funções a classe DLL :
    1. Crie uma função que retorna uma seqüência de caracteres.
    2. Criar uma função que leva um parâmetro longo e que retorna um valor LONG. Essa função faz um loop que adiciona números de 1 para o número que é passado para a função.
  3. Crie um novo projeto Web Application que tem duas páginas .aspx (Page1.aspx e Page2.aspx).
  4. No arquivo global.asax do evento Session_Start , use CreateObject para criar uma instância do objeto que você criou na etapa 1.
  5. No evento Page_Load do Page1.aspx, chame um das funções que você criou na etapa 2 de objeto que é armazenado no estado de sessão.
  6. Criar um hyperlink para page2.aspx em Page1.aspx.
  7. No evento Page_Load do page2.aspx, chame o método Session.Abandon .
  8. Use o Application Center Test (ACT) para criar um teste que registra a operação de exibir Page1.aspx e, em seguida, exibir page2.aspx.
  9. Execute o teste com dez usuários. Consulte é se o erro 0x8004e005 exibido em Visualizar eventos.

    Observação Talvez seja necessário aumentar o número de usuários para reproduzir o problema.

Referências

Para obter informações adicionais, clique nos números abaixo para ler os artigos na Base de dados de Conhecimento da Microsoft:
243543INFO: Pendente armazenar STA objetos na Session ou Application
243815PROBLEMA: Armazenar STA COM componentes na sessão proteção sessão para baixo para segmento único
817005CORRECÇÃO: Problemas de desempenho grave ao vincular o estado da sessão threads no modo ASPCompat

Propriedades

ID do artigo: 827164 - Última revisão: quarta-feira, 26 de fevereiro de 2014 - Revisão: 1.7
A informação contida neste artigo aplica-se a:
  • Microsoft .NET Framework 1.1
  • Microsoft Visual Studio .NET 2003 Enterprise Architect
  • Microsoft Visual Studio .NET 2003 Enterprise Developer
  • Microsoft Visual Studio .NET 2003 Academic Edition
  • Microsoft ASP.NET 1.1
Palavras-chave: 
kbnosurvey kbarchive kbmt kbhotfixserver kbqfe kberrmsg kbnetframe100presp3fix kbfix kbqfe kbcode kbbug KB827164 KbMtpt
Traduçã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 traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 827164

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com