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 é accionada uma excepção não processada num Microsoft baseados no ASP.NET termina aplicação criada no Microsoft .NET Framework 2.0, a aplicação inesperadamente. Quando este problema ocorre, não informações de excepção que tem de ter noções sobre o problema são registadas no registo de aplicações.
No entanto, uma mensagem de evento que é semelhante à seguinte poderá ser registada no registo do sistema:
Tipo de evento: aviso Origem do evento: W3SVC Categoria do evento: nenhum ID do evento: 1009 Data: 9/28/2005 Hora: 3: 18: 11 PM utilizador: N/d Computador: Servidor de IIS Descrição: Um processo que fornecia serviços ao agrupamento de aplicações ? DefaultAppPool ? terminou inesperadamente. O id de processo era ? 2548 ?. O código de saída do processo foi ? 0xe0434f4d ?.
Além disso, uma mensagem de evento que é semelhante à seguinte poderá ser registada no registo de aplicações:
Tipo de evento: erro Origem do evento: .NET Runtime 2.0 relato de erros Categoria do evento: nenhum ID do evento: 5000 Data: 9/28/2005 Hora: 3: 18: 02 PM Utilizador: 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.
Este problema ocorre porque a política predefinida de excepções não processadas foi alterada no .NET Framework 2.0. Por predefinição, a política para excepções não processadas é de terminar o processo de trabalho.
No Microsoft .NET Framework 1.1 e no Microsoft .NET Framework 1.0, excepções não processadas em threads geridos foram ignoradas. Apercebe-se ligado um depurador a detectar a excepção, seria não se que nada foi errado.
O ASP.NET utiliza a política predefinida para excepções não processadas no .NET Framework 2.0. Quando é accionada uma excepção não processada, a aplicação baseada em ASP.NET encerra inesperadamente.
Este comportamento não se aplica às excepções que ocorrem no contexto de um pedido. Estes tipos de excepções ainda são tratados e moldados por um objecto HttpException . Excepções que ocorrem no contexto de um pedido não causam o processo de trabalho terminar. No entanto, excepções não processadas fora do contexto de um pedido, tal como excepções num thread temporizador ou numa função chamada de retorno, fazer com que o processo de trabalho terminar.
Modifique o código origem para o objecto IHttpModule isso-irá registar informações de excepção no registo de aplicações. As informações que estão ligadas incluem o seguinte:
O caminho do directório virtual na qual ocorreu a excepção
O nome da excepção
A mensagem
O rastreio da pilha
Para modificar o objecto IHttpModule , siga estes passos.
Nota Este código registará uma mensagem com a origem de eventos do ASP.NET 2.0.50727.0 e o tipo de evento de erro no registo de aplicações. Para testar o módulo, o pedido de ASP.NET uma página que utiliza o método ThreadPool.QueueUserWorkItem para chamar um método que inicia uma excepção não processada.
Coloque o seguinte código num ficheiro denominado 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);
}
}
}
Guarde o ficheiro UnhandledExceptionModule.cs para a seguinte pasta:
C:\Program Files\Microsoft Visual Studio 8\VC
Abra a linha de comandos Microsoft Visual Studio 2005.
Escreva sn.exe -k key.snk e, em seguida, prima ENTER.
Escreva csc /t:library /r:system.web.dll,system.dll /keyfile:key.snk UnhandledExceptionModule.cs e, em seguida, prima ENTER.
Tipo gacutil.exe /if UnhandledExceptionModule.dll , e, em seguida, prima ENTER.
Escreva ngen instalar UnhandledExceptionModule.dll e, em seguida, prima ENTER.
Tipo gacutil /l UnhandledExceptionModule , e, em seguida, prima ENTER para apresentar o nome para o ficheiro UnhandledExceptionModule forte.
9. Adicione o seguinte código ao ficheiro Web.config da aplicação baseados no ASP.NET.
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: 911816
(http://support.microsoft.com/kb/911816/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.