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.
Quando uma exceção não tratada é lançada em um Microsoft baseado em ASP.NET encerra o aplicativo que é criado no Microsoft .NET Framework 2.0, o aplicativo inesperadamente. Quando esse problema ocorre, nenhuma informação de exceção que você deve ter para noções básicas sobre o problema é registrada no log do aplicativo.
No entanto, uma mensagem de evento é semelhante à seguinte pode ser registrada no log do sistema:
Tipo de evento: aviso Origem do evento: W3SVC Categoria do evento: nenhum IDENTIFICAÇÃO de evento: 1009 Data: 28/9/2005 Tempo: 3: 18: 11 Usuário de PM: N/d Computador: Servidor de IIS Descrição: Um processo que atende ao pool de aplicativos ? DefaultAppPool ? foi encerrado inesperadamente. A identificação do processo era ? 2548 ?. O código de saída do processo era ? 0xe0434f4d ?.
Além disso, uma mensagem de evento é semelhante à seguinte pode ser registrada no log do aplicativo:
Tipo de evento: erro Origem do evento: .NET Runtime 2.0 erros Categoria do evento: nenhum IDENTIFICAÇÃO de evento: 5000 Data: 28/9/2005 Tempo: 3: 18: 02 PM Usuário: N/d Computador: Servidor de IIS Descrição: EventType clr20r3, w3wp.exe P1, P2 6.0.3790.1830, P3 42435be1, P4 app_web_7437ep-9, P5 0.0.0.0, P6 433b1670, P7 9, P8, P9 system.exception, P10 NIL.
Esse problema ocorre porque a diretiva padrão para exceções sem tratamento foi alterado no .NET Framework 2.0. Por padrão, a diretiva para exceções não tratadas é finalizar o processo de trabalho.
No Microsoft .NET Framework 1.1 e no Microsoft .NET Framework 1.0, exceções sem tratamento em threads gerenciados foram ignoradas. A menos que você anexou um depurador para capturar a exceção, você não deve perceber que algo estava errado.
ASP.NET usa a diretiva padrão para exceções sem tratamento no .NET Framework 2.0. Quando uma exceção não tratada é lançada, o aplicativo baseado em ASP.NET fecha inesperadamente.
Esse comportamento não se aplica às exceções que ocorrem no contexto de uma solicitação. Esses tipos de exceções ainda são tratados e delimitados por um objeto HttpException . Exceções que ocorrem no contexto de uma solicitação não causam o processo do operador finalizar. No entanto, exceções sem tratamento fora do contexto de uma solicitação, como exceções em um thread timer ou em uma função de retorno de chamada, fazem com que o processo do operador finalizar.
Modificar o código fonte para o objeto IHttpModule para que ele será fazer logon de informações de exceção no log do aplicativo. As informações que estão conectadas incluem o seguinte:
O caminho no qual ocorreu a exceção do diretório virtual
O nome da exceção
A mensagem
O rastreamento de pilha
Para modificar o objeto IHttpModule , siga estas etapas.
Observação Esse código registrará uma mensagem que tem o tipo de evento de erro e a fonte de eventos do ASP.NET 2.0.50727.0 no log do aplicativo. Para testar o módulo, solicitação de página de um ASP.NET que usa o método ThreadPool.QueueUserWorkItem para chamar um método que lança uma exceção não tratada.
Coloque o código a seguir em um arquivo chamado UnhandledExceptionModule.cs.
using System;
using System.Diagnostics;
using System.Globalization;
using System.IO;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading;
using System.Web;
namespace WebMonitor {
public class UnhandledExceptionModule: IHttpModule {
static int _unhandledExceptionCount = 0;
static string _sourceName = null;
static object _initLock = new object();
static bool _initialized = false;
public void Init(HttpApplication app) {
// Do this one time for each AppDomain.
if (!_initialized) {
lock (_initLock) {
if (!_initialized) {
string webenginePath = Path.Combine(RuntimeEnvironment.GetRuntimeDirectory(), "webengine.dll");
if (!File.Exists(webenginePath)) {
throw new Exception(String.Format(CultureInfo.InvariantCulture,
"Failed to locate webengine.dll at '{0}'. This module requires .NET Framework 2.0.",
webenginePath));
}
FileVersionInfo ver = FileVersionInfo.GetVersionInfo(webenginePath);
_sourceName = string.Format(CultureInfo.InvariantCulture, "ASP.NET {0}.{1}.{2}.0",
ver.FileMajorPart, ver.FileMinorPart, ver.FileBuildPart);
if (!EventLog.SourceExists(_sourceName)) {
throw new Exception(String.Format(CultureInfo.InvariantCulture,
"There is no EventLog source named '{0}'. This module requires .NET Framework 2.0.",
_sourceName));
}
AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(OnUnhandledException);
_initialized = true;
}
}
}
}
public void Dispose() {
}
void OnUnhandledException(object o, UnhandledExceptionEventArgs e) {
// Let this occur one time for each AppDomain.
if (Interlocked.Exchange(ref _unhandledExceptionCount, 1) != 0)
return;
StringBuilder message = new StringBuilder("\r\n\r\nUnhandledException logged by UnhandledExceptionModule.dll:\r\n\r\nappId=");
string appId = (string) AppDomain.CurrentDomain.GetData(".appId");
if (appId != null) {
message.Append(appId);
}
Exception currentException = null;
for (currentException = (Exception)e.ExceptionObject; currentException != null; currentException = currentException.InnerException) {
message.AppendFormat("\r\n\r\ntype={0}\r\n\r\nmessage={1}\r\n\r\nstack=\r\n{2}\r\n\r\n",
currentException.GetType().FullName,
currentException.Message,
currentException.StackTrace);
}
EventLog Log = new EventLog();
Log.Source = _sourceName;
Log.WriteEntry(message.ToString(), EventLogEntryType.Error);
}
}
}
Salve o arquivo UnhandledExceptionModule.cs para a seguinte pasta:
C:\Arquivos de Programas\Microsoft Visual Studio 8\VC
Abra o prompt de comando Microsoft Visual Studio 2005.
Digite sn.exe -k key.snk e, em seguida, pressione ENTER.
Digite csc/t: Library /r:system.web.dll,system.dll /keyfile:key.snk UnhandledExceptionModule.cs e, em seguida, pressione ENTER.
Tipo gacutil.exe /if UnhandledExceptionModule.dll , e, em seguida, pressione ENTER.
Digite ngen instalar UnhandledExceptionModule.dll e, em seguida, pressione ENTER.
Tipo gacutil /l UnhandledExceptionModule , e em seguida, pressione ENTER para exibir o nome forte para o arquivo UnhandledExceptionModule .
9. Adicione o seguinte código para o arquivo Web.config do seu aplicativo baseado em ASP.NET.
Altere a diretiva de exceção sem tratamento de volta para o comportamento padrão que ocorre no .NET Framework 1.1 e no .NET Framework 1.0.
Observação Não é recomendável que você alterar o comportamento padrão. Se você ignorar exceções, o aplicativo pode vazar recursos e abandonar bloqueios.
Para habilitar esse comportamento padrão, adicione o código a seguir ao arquivo Aspnet.config localizado na seguinte pasta:
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: 911816
(http://support.microsoft.com/kb/911816/en-us/
)
Quanto esforço foi necessário para seguir os procedimentos deste artigo?
Muito baixo
Baixo
Moderado
Alto
Muito alto
O que podemos fazer para melhorar essa informação?
Para proteger sua privacidade, não inclua informações de contato em seus comentários.
Obrigado! Seus comentários são usados para nos ajudar a aperfeiçoar o conteúdo de suporte. Para obter mais opções de ajuda, visite a Home Page de Ajuda e Suporte.