最近,我向一个生产网站发布了一个asp.net web。在大约每天一次的生产中,未处理的异常会导致网站进程回收:
出现未处理的异常,进程被终止。应用程序ID: /LM/W3SVC/2/根/绿洲进程ID: 9236异常: System.AggregateException消息:通过等待任务或访问其异常属性没有观察到任务的异常。因此,未观察到的异常由终结器线程重新引发。System.Threading.Tasks.TaskExceptionHolder.Finalize() StackTrace: InnerException: System.Web.HttpException消息:远程主机关闭了连接。错误代码为0x800704CD。(在System.Web.Http.WebHost.HttpControllerHandler.EndProcessRequest(IAsyncResult结果)在System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()的System.Web.HttpApplication.ExecuteStep(IExecutionStep步骤中,布尔& completedSynchronously)
此异常似乎不是起源于程序代码,而是源于web内部。我需要防止这样的过度循环过程,因为这会破坏大量用户的会话。
据我了解,处理此异常的一种方法是使用:
TaskScheduler.UnobservedTaskException += (sender, e) =>
{
McpsEventLog.PostException(e.Exception, "webapicontroller");
e.SetObserved();
};但是要想让它起作用,我可以把这些代码放在哪里。在web控制器的某个地方?或者在global.asax。有人知道如何在UnobserveredTaskException Web服务中实现asp.net吗?
发布于 2012-08-29 11:50:44
您说得对:在web应用程序的上下文中,未处理的异常是不可接受的。设置该处理程序的正确位置是Application_Start事件。
您还应该设置UnhandledException事件。不过,它不允许你吞下这个例外。只是记录一下。
最后,请看我关于这个主题的问题:如何在ASP.NET中处理未处理的线程异常?我没有得到一个可用的答案,但它仍然可能对您有所帮助。
https://stackoverflow.com/questions/12169230
复制相似问题