为什么global.asax Application_Error方法不捕获ASMX服务抛出的异常?

cau*_*tic 42 asp.net error-handling asmx

以及如何解决它.为了维护目的,我想记录每个抛出的异常.

Rae*_*ark 42

这是.Net中的已知问题 - Application_Error永远不会为Web服务触发.不确定它是否有任何原因可以通过设计,但它不起作用.

杰夫阿特伍德几年前就此发表了一篇文章(并跟进),提出了以下想法:

  • 在每个Web服务方法周围放置一个try-catch块
  • 使用外观设计模式并在父对象中包含try-catch
  • 编写自定义SOAP扩展或HTTPModule

我唯一关心的是第一个,即使它似乎很多工作.


Joh*_*ers 16

更好:HttpApplication.Error事件:

注意:

如果Web应用程序包含XML Web服务,则不能将Error事件用于这些服务的全局异常处理.XML Web服务的HTTP处理程序消耗XML Web服务中发生的任何异常,并在调用Error之前将其转换为SOAP错误.要处理XML Web服务异常,请构建SOAP扩展以在自定义全局异常处理程序中处理Web服务异常.有关更多信息,请参阅XML Web Services中的处理和抛出异常.


kba*_*eau 13

对于任何寻求微软关于此主题的人,请参阅此处:" 处理和抛出XML Web服务中的异常 ".

这是相关部分:

Web应用程序可以包含多个XML Web服务,但Global.asax文件中的Application_Error事件不能用于全局异常处理.用于XML Web服务的HttpHandler消耗在执行XML Web服务时发生的任何异常,并在调用Application_Error事件之前将其转换为SOAP错误.