CORRECÇÃO: Referências para objectos STA armazenadas num estado de sessão podem ficam danificadas se eles são chamados a partir de um evento Session_End

Traduções de Artigos Traduções de Artigos
Artigo: 827164 - Ver produtos para os quais este artigo se aplica.
Importante
Para obter uma Microsoft .NET Framework 1.0 versão deste artigo, consulte 827163.
Este artigo foi arquivado. Este artigo é oferecido "tal como está" e deixará de ser actualizado.
Expandir tudo | Reduzir tudo

Nesta página

Sintomas

Se armazenar as referências a objectos single-threaded apartment (STA) no estado da sessão e defina o atributo AspCompat como true , as referências podem ficar danificadas ou podem ficar perdidas quando tenta aceder aos objectos do evento Session_End .

Nota Normalmente, este problema poderá ocorrer se executar a aplicação em cargas de elevado ou se utilizar uma ferramenta de pressão como, por exemplo, Application Center Test (ACT) quando executar a aplicação. Quando este problema ocorre, recebe uma "0x8004e005 erro de" mensagem de erro no registo de eventos.

Causa

O problema ocorre porque o evento Session_End não tem de ser executado no mesmo thread em que a sessão foi criada no. Uma vez que o objecto STA já não é no mesmo thread que a sessão foi criada no, de empacotamento de referências necessários para obter acesso ao objecto. Este comportamento provoca um desempenho lento.

Pode armazenar objectos STA no estado da sessão. No entanto, a Microsoft não recomenda que fazê-lo. Para mais informações, consulte a secção "Referências" deste artigo.

Resolução

Esta correcção adiciona uma nova definição de configuração para o ficheiro Machine.config. Depois de instalar a correcção, a seguinte configuração de aplicação está disponível.
<httpRuntime apartmentThreading=?true|false? />,
por predefinição, apartmentThreading estiver definida como false . Se definir apartmentThreading como true , ocorre o seguinte comportamento:
  • Todos os eventos Session_Start executado em threads STA que correspondem ao ID de sessão, independentemente da página de destino ou a rotina de tratamento.
  • Todos os eventos Session_End executar em threads STA que correspondem ao ID de sessão.
  • AspCompat torna-se definido como true para todas as páginas, excepto para as páginas com AspCompat definida explicitamente como false .
Nota Ainda é possível executar o evento Session_Start num thread STA depois de aplicar esta correcção se apartmentThreading estiver definido como false e AspCompat está definida como true para a página de destino.

Esta correcção funciona para objectos STA são armazenados directamente no estado da sessão. Esta correcção também funciona para um objecto STA que está aninhada uma profunda nível, tais como um objecto .NET que é armazenado no estado da sessão e que tem uma referência a um objecto STA. No entanto, esta correcção não funciona para objectos STA que estão armazenados mais do que um nível de profundidade.

importante Esta correcção contém dois tipos de pacotes: um pacote do Microsoft Windows Installer e um pacote de Gestor de componentes opcionais (OCM). Se utilizar o Microsoft Windows Server 2003, tem de especificar que requerem a actualização do Windows Server 2003 (OCM), uma vez que os ficheiros do .NET Framework 1.1 monitoriza a protecção de ficheiros do Windows Server 2003. Se utilizar um sistema operativo diferente do Windows Server 2003, terá de continuar utilizar o pacote do Windows Installer.

A versão OCM desta correcção está disponível nos seguintes idiomas:
  • Inglês (ENU)
  • Japonês (JPN)
  • Alemão (DEU)
  • Francês (FRN)
Agora é disponibilizada pela Microsoft uma correcção suportada, mas destina-se apenas a corrigir o problema descrito neste artigo. Aplique-a apenas em sistemas que tenham este problema específico. Esta correcção poderá submetida a testes adicionais. Por conseguinte, se não estiver a ser gravemente afectado por este problema, recomendamos que aguarde pelo próximo service pack do Microsoft .NET Framework 1.1 que contenha esta correcção.

Para resolver este problema imediatamente, contacte o suporte técnico da Microsoft para obter a correcção. Para obter uma lista completa de números de telefone do suporte técnico da Microsoft e informações sobre os custos de suporte, visite o seguinte Web site da Microsoft:
http://support.microsoft.com/contactus/?ws=support
Nota Em casos especiais, os custos normalmente inerentes às chamadas de suporte poderão ser anulados, se um técnico de suporte da Microsoft determinar que uma actualização específica resolverá o problema. Os custos normais do suporte serão aplicados a problemas adicionais e questões de suporte que não se enquadrem na atualização específica em questão.

A versão inglesa desta correcção tem os atributos de ficheiro (ou posteriores) listados na seguinte tabela. As datas e horas destes ficheiros são indicadas no formato de universal hora (UTC) coordenada Coordinated. Quando visualiza as informações do ficheiro, é convertido para a hora local. Para determinar a diferença entre a UTC e a hora local, utilize o separador fuso horário na ferramenta Data e hora no painel de controlo.
   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

Ponto Da Situação

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

Mais Informação

Este pacote de correcções também inclui uma correcção secundária. Se definir AspCompat como true e definir um objecto STA armazenado no estado da sessão nula , poderá receber uma mensagem de erro "NullReferenceException" quando 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 esta página pela primeira vez, o código é executado correctamente. No entanto, se recarregar a página, receberá uma mensagem de erro "NullReferenceException" do Microsoft ASP.NET e não é possível visualizar a página novamente na sessão actual.

Rastreio da 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 definiu AspCompat como false , este comportamento não ocorre.

Passos para reproduzir o comportamento

Para reproduzir o problema é apresentado na secção "Sintomas" deste artigo, siga estes passos:
  1. Utilize o Microsoft Visual Basic .NET para criar um objecto de DLL de ActiveX do Visual Basic.

    Nota Se marcar o componente como Execução automática (UE), o erro ainda ocorre.
  2. Crie duas funções na classe de DLL :
    1. Crie uma função que devolve uma cadeia.
    2. Crie uma função que utiliza um parâmetro longo e que devolve um valor LONG. Esta função é um ciclo adiciona números de 1 para o número que é transmitido à função.
  3. Crie um projecto Aplicações Web novo que tem duas páginas .aspx (Page1.aspx e Page2.aspx).
  4. No ficheiro global.asax do evento Session_Start , utilize CreateObject para criar uma instância do objecto que criou no passo 1.
  5. No evento Page_Load do Page1.aspx, ligue uma das funções que criou no passo 2 do objecto armazenado no estado da sessão.
  6. Crie uma hiperligação para Page2.aspx Page1.aspx.
  7. No evento Page_Load do Page2.aspx, chame o método Session.Abandon .
  8. Utilize o teste de centro de aplicações (ACT) para criar um teste que regista a operação de visualização Page1.aspx e, em seguida, visualizar Page2.aspx.
  9. Execute o teste com dez utilizadores. Consulte se erro 0x8004e005 aparece no Visualizador de eventos.

    Nota Poderá ter de aumentar o número de utilizadores para reproduzir o problema.

Referências

Para obter informações adicionais, clique números de artigo que se seguem para visualizar os artigos na base de dados de conhecimento da Microsoft:
243543INFO: arquivo não STA objectos Session ou Application
243815PROBLEMA: Armazenar STA COM componentes na sessão protecções sessão para baixo para thread único
817005CORRECÇÃO: Problemas de desempenho graves quando o estado da sessão É BIND para threads em modo ASPCompat

Propriedades

Artigo: 827164 - Última revisão: 27 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 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: 827164

Submeter comentários

 

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