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.
Considere o seguinte cenário. Uma aplicação do Microsoft ASP.NET invoca componentes Microsoft COM + em processo. O pedido de tempo limite de momento preciso à medida que determinadas operações ocorrem num componente COM +. Neste cenário, tempo de execução + poderá indicar uma falha ao subsistema de relato de erros do Windows. Em seguida, a funcionalidade Relato de erros do Windows pode demorar acções que podem causar atrasos adicionais na aplicação e composto o problema subjacente. Quando visualiza o registo do sistema no Visualizador de eventos, poderá notar um evento semelhante à seguinte:
ID de evento COM +: 4768 Tipo de evento: erro Origem do evento: + Categoria do evento: Evento desconhecido ID: 4786 Descrição: O sistema chamou um componente personalizado e esse componente tem falha e gerou uma excepção. Isto indica um problema com o componente personalizado. Notifique o programador deste componente que ocorreu uma falha e fornecer-lhes as informações abaixo. Nome do método: IObjectControl::Deactivate() Excepção: E0434F4D Endereço: 0x77E649D3 Chamar pilha: Kernel32! RaiseException + 0x48 mscorsvr! CoEEShutDownCOM + 0xe448 mscorsvr! CoEEShutDownCOM + 0xe3cb mscorsvr! CoEEShutDownCOM + 0xe37f mscorsvr! CoEEShutDownCOM + 0xe322 mscorsvr! GetMetaDataPublicInterfaceFromInternal + 0x26ef mscorsvr! CoEEShutDownCOM + 0x15eae mscorsvr! ReleaseFusionInterfaces + 0x1d2fa Comsvcs! RegisterComEvents + 0x3f074 Comsvcs! RegisterComEvents + 0x40146 Ole32! ReadStringStream + 0x22057 Ole32! CreateDataAdviseHolder + 0x1534 Ole32! CoQueryAuthenticationServices + 0xf5f Ole32! CoQueryAuthenticationServices + 0x1b06 Ole32! CoQueryAuthenticationServices + 0x2236 Tipo de evento: erro Origem do evento: Erro de aplicação Categoria do evento: (100) ID do evento: 1000 Descrição: Em falha aplicação w3wp.exe, versão 6.0.3790.1830, módulo kernel32.dll, versão 5.2.3790.2756, endereço em falha 0x00015e02 provocar uma falha. Para mais informações, consulte o Centro de ajuda e suporte ' em http://go.Microsoft.com/fwlink/events.asp. Dados: 0000: 41 70 70 c 6 69 63 61 Applicat 74 0008: 6e 6f 69 20 46 61 da aplicação c 6 69 falha 0010: 75 72 20 65 77 20 77 33 urarem w3w 0018: 70 2e 78 65 20 65 36 2e p.exe 6. 0020: 30 2e 37 33 39 30 2e 31 0.3790.1 0028: 38 33 30 20 69 6e 20 6b 830 k em 0030: 65 72 6e 65 c 6 33 32 2e ernel32. 0038: 64 c 6 6 c 20 35 2e 32 2e dll 5.2. 0040: 33 37 39 30 2e 32 37 3790.275 35 0048: 36 20 61 74 20 6f 66 66 6 em Desactivar 0050: 73 65 74 20 30 30 30 31 conjunto 0001 0058: 35 65 30 32 5e02
Este problema ocorre quando for excedido o limite de tempo limite para um pedido ASP.NET. Tempo de execução ASP.NET pára o pedido por deitar uma excepção ThreadAbortException para o thread que processa o pedido. Se o pedido ASP.NET invoca um componente COM + em processo, se qualquer um dos métodos IObjectControl do componente estiverem em execução no momento da excepção ThreadAbortException , tempo de execução + irá detectar a excepção e relatório de falha para relatório de erros do Windows. Em seguida, relatório de erros do Windows, pode criar entradas de registo de eventos e comunicar com servidores de relato de erros. Quando este comportamento ocorre, o thread que executa o pedido ASP.NET bloqueará e a resposta está atrasada. Relatório de erros do Windows também podem criar um ficheiro de informação do processo. Quando este comportamento ocorre, o processo fica bloqueado e todas as respostas se atrasem. Processos que hospedem dentro do processo (biblioteca) + aplicações não são terminados quando ocorrem estes erros. Além disso, o ciclo pode repetir durante interrupções subsequentes e provocar atrasos adicionais.
Nota O exemplo na secção "Mais informação" utiliza uma classe de Microsoft .NET Framework ServicedComponent . No entanto, o mesmo problema pode ocorrer se a aplicação utiliza componentes COM + não geridos.
Para resolver este problema, evite o limite de tempo ASP.NET. Se os pedidos do ASP.NET não devem exceder o limite de tempo limite, investigar e resolver a origem de atrasos subjacentes. Os seguintes métodos podem ser ferramentas eficazes para descobrir a origem do atraso subjacente:
Analise ficheiros de informação do processo efectuadas quando detecta o atraso subjacente.
Execute a aplicação num utilitário de gerador de perfis.
Utilize o registo em toda a aplicação.
Em alguns cenários, os pedidos devem ser esperados demorar mais tempo do que o limite de pedido de tempo predefinido ASP.NET. Nestes cenários, terá de alterar o valor de limite de tempo para um valor mais apropriado. Para o fazer, utilize um dos seguintes métodos:
Para contornar este problema, pode alterar a aplicação do COM + de uma aplicação dentro do processo (biblioteca) para um aplicativo fora de processo (servidor). Numa aplicação de servidor, os componentes do COM + executadas num processo separado de pedidos ASP.NET. Por conseguinte, o runtime do COM + não detecta uma excepção ThreadAbortException e a excepção não é comunicada ao subsistema de relato de erros do Windows.
Siga os passos do artigo da base de dados de conhecimento da Microsoft 306296 criar uma classe de ServicedComponent simples e, em seguida, instalar a classe para COM +. Para obter mais informações, clique no número de artigo que se segue para visualizar o artigo na Microsoft Knowledge Base:
306296
(http://support.microsoft.com/kb/306296/
)
Como criar um serviço componente .NET no Visual C# .NET
Adicione o seguinte exemplo de código para o ServicedComponent class.
protected override void Activate()
{
// Sleep for 100 seconds.
// (The default ASP.NET time-out is 90 seconds.)
System.Threading.Thread.Sleep(1000*100);
}
Crie uma aplicação Web no Microsoft Visual C#. Para o fazer, siga estes passos:
Inicie o Microsoft Visual Studio NET..
No menu ficheiro , aponte para Novo e, em seguida, clique em projecto .
Na caixa de diálogo Novo projecto , clique em Visual C# Projects em Project Types e, em seguida, clique em ASP.NET Web Application em modelos .
Na caixa localização , escreva http://localhost/TestWeb1 .
Clique em OK para criar o projecto. WebForm1.aspx é adicionado ao projecto.
No Solution Explorer, clique com o botão direito do rato TestWeb1 e, em seguida, clique em Add Reference .
Na caixa de diálogo Adicionar referência do , clique em Procurar .
Na caixa de diálogo Seleccionar componentes , seleccione a DLL que contém o ServicedComponent -derivada classe que gerou no passo 1.
No Solution Explorer, clique com o botão direito do rato em WebForm1.aspx e, em seguida, clique em Código .
Adicione o seguinte exemplo de código para o Page_Load evento procedure.
// Create an instance of the ServicedComponent-derived class.
// Note: Change the namespace and the class name as appropriate.
MyNamespace.MyServicedComponent sc = new MyNamespace.MyServicedComponent();
// Call any method on this object to cause the Activate method to occur.
sc.DoTrans();
Utilize um utilitário de teste de stress para testar a página http://localhost/TestWeb1/WebForm1.aspx. Por exemplo, siga os passos listados no seguinte artigo da base de dados de conhecimento da Microsoft:
815161
(http://support.microsoft.com/kb/815161/
)
Como medida ASP.NET resposta com a ferramenta Web Application Stress
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: 917069
(http://support.microsoft.com/kb/917069/en-us/
)
Qual foi o esforço que despendeu pessoalmente para utilizar este artigo?
Muito baixo
Baixo
Moderado
Elevado
Muito elevado
Diga-nos porquê e o que podemos fazer para melhorar estas informações
Obrigado! Os seus comentários são utilizados para ajudar-nos a melhorar o conteúdo do nosso suporte. Para obter mais opções de assistência, visite a Home Page de Ajuda e Suporte.