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

时间:2008-10-17 09:21:36

标签: asp.net error-handling asmx

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

4 个答案:

答案 0 :(得分:42)

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

几年前,杰夫阿特伍德有一个post(以及follow-up)关于此问题,提出了以下想法:

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

我唯一关心的是第一个,即使看起来很多工作。

答案 1 :(得分:16)

更好:HttpApplication.Error event

注意:

  

如果您的Web应用程序包含XML   Web服务,你不能使用Error   用于全局异常处理的事件   那些服务。 HTTP处理程序   XML Web服务消耗任何   XML Web中发生的异常   服务并将其转换为SOAP   在调用Error之前发生错误。   要处理XML Web服务异常,   构建SOAP扩展来处理Web   自定义全局中的服务异常   异常处理程序更多   信息,请参阅Handling and Throwing Exceptions in XML Web Services

答案 2 :(得分:13)

对于在此主题上寻找微软话语的任何人,请参阅此处:“Handling and Throwing Exceptions in XML Web Services”。

这是相关部分:

  

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

答案 3 :(得分:-4)

默认情况下,Application_error在iis 7上不起作用。