Asp.net mvc 如何防止ASP.net WP因错误而终止

Asp.net mvc 如何防止ASP.net WP因错误而终止,asp.net-mvc,nservicebus,cqrs,neventstore,Asp.net Mvc,Nservicebus,Cqrs,Neventstore,我的ASP.NETMVC项目中有一些代码,它异步发送消息。在某些情况下,该代码可能会失败并导致意外异常。我无法直接访问引发异常的代码或生成线程的代码,因此无法捕获并处理那里的错误。我曾尝试在Global.asax中捕获应用程序_错误级别,但该函数仅针对页面错误而不是背景错误抛出。我还尝试通过实现OnUnhandledException来捕获HTTP模块,但我无法捕获异常并阻止工作进程存在于其中 有没有办法防止这些错误变得如此致命?我知道它们是严重错误,应该处理,但我希望它们不会终止其他页面上其他

我的ASP.NETMVC项目中有一些代码,它异步发送消息。在某些情况下,该代码可能会失败并导致意外异常。我无法直接访问引发异常的代码或生成线程的代码,因此无法捕获并处理那里的错误。我曾尝试在Global.asax中捕获应用程序_错误级别,但该函数仅针对页面错误而不是背景错误抛出。我还尝试通过实现OnUnhandledException来捕获HTTP模块,但我无法捕获异常并阻止工作进程存在于其中

有没有办法防止这些错误变得如此致命?我知道它们是严重错误,应该处理,但我希望它们不会终止其他页面上其他用户的工作进程

更多细节:

消息分派器是EventStore,我相信我在本例中遇到的问题是,它试图反序列化一条消息,该消息从以前版本的NServiceBus实现了ICommand。更新到最新beta版后,反序列化似乎失败了。不幸的是,我愚蠢地删除了导致错误的提交,因此无法完全复制该问题

到目前为止,我发现模拟错误的最好方法是

   public virtual ActionResult Error()
    {
        Task.Factory.StartNew(blowup);
        return new EmptyResult();
    }
    private void blowup()
    {
        throw new Exception("snap");
    }
您会注意到快照异常被抛出并正确处理,而不会引起问题。但是,如果您等待,那么我们没有观察到任务的exception属性这一事实最终将杀死整个应用程序


针对卡西尼号进行了测试,但在IIS 7.5上看到了类似的行为

问题是任何未处理的异常都会导致进程中止。这个问题与ASP.NET无关

连接UnobservedTaskeException事件()以捕获所有异常(并向您发送电子邮件)


我认为最好的做法是把这个事件加上AppultIsError事件加上thord.unHuntExcel事件。< /P> < P> .NET 1.1为所有未处理的异常提供了后盾。它会悄悄地抓住他们,继续快乐地前进

在.NET 2.0中,Microsoft将此更改为您现在看到的行为:任何完全未处理的异常都会导致进程停止,但您可以通过应用程序错误方法的“处理程序汤”Thread.UnhandledException事件和.NET 4.0中的TaskScheduler.UnobservedTaskeException来处理某些异步异常

Microsoft提供了一个配置值以恢复.NET 1.1行为,这在web应用程序中非常关键,因为一个错误的异常可能会回收整个进程,从而破坏进程中有价值的缓存项

部分:

<legacyUnhandledExceptionPolicy enabled="1"/>


Microsoft文章对此进行了更详细的解释。

这是一个很好的说明,但我使用task只是一种快速的方式,表明没有捕获后台线程异常。我的建议将处理所有未处理的异常(如果您也订阅了UnhandledException事件)。啊,好的,很好。我现在可以很高兴地截获并记录异常,但它仍然会降低工作进程。我发现关键是将异常设置为所观察到的。对不起,我忘了提到这一点。这不是一个好的解决方案。简单地忽略这些错误对任何人都没有帮助。在2.0版中更改功能是有原因的。当然,您仍然应该记录、分类和修复。问题是如何防止他们终止webapp。