不会调用AppDomain.CurrentDomain.UnhandledException

Vac*_*ano 6 .net c# asp.net iis wcf

我有一个WCF服务,在Global.asax中有以下代码:

protected void Application_Start(object sender, EventArgs e)
{
    // Make sure that any exceptions that we don't handle at least get logged.
    AppDomain.CurrentDomain.UnhandledException += LogUnhandledException;
}

private void LogUnhandledException(object sender, UnhandledExceptionEventArgs e)
{
    Log.Error.LogException("UnhandledException", e.ExceptionObject as Exception);
}
Run Code Online (Sandbox Code Playgroud)

我们的想法是至少记录所有未公开的异常.

但它似乎从未被称为.我尝试在我的一个服务操作中执行Divide by Zero,它只是在遇到异常后停止服务.

int zero = 0;
int result = 100 / zero;
Run Code Online (Sandbox Code Playgroud)

永远不会调用LogUnhandledException方法.

我在IIS中运行并在调试器中运行.

如何让此事件适用于WCF服务?

Jus*_*tin 8

应用程序域未处理异常过滤器是允许应用程序在终止之前记录有意义信息的最后尝试.

此事件提供未捕获异常的通知.它允许应用程序在系统默认处理程序向用户报告异常并终止应用程序之前记录有关异常的信息.

如果WCF允许服务抛出的异常以这种方式完全未处理,则意味着当服务在IIS中托管时,整个工作进程将被终止,因为单个请求引发了异常 - 而不是理想的结果.因此,WCF不会保留未处理的服务抛出的异常 - 在这种情况下不会引发此事件.

如果要记录WCF服务抛出的异常,请改为查看IErrorHandler接口.