全局.asax文件中的Application_Error方法为什么不能捕获由ASMX服务抛出的异常?

43

如何修复它。我想为维护目的记录每个抛出的异常。

3个回答

43

这是一个已知的问题,在.NET中,对于Web服务,Application_Error永远不会触发。不确定是否有任何原因是按设计来的,但它只是不起作用。

几年前,Jeff Atwood在他的博客文章(以及后续)中提到了以下想法:

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

尽管第一个方法看起来很费力,但它是我最关心的方法。


17

Better: HttpApplication.Error事件

注意:

如果你的Web应用程序包含XML Web服务,你不能使用Error事件来全局处理这些服务的异常。XML Web服务的HTTP处理程序会在调用Error事件之前消耗任何在XML Web服务中发生的异常,并将其转换为SOAP故障。要处理XML Web服务异常,请构建一个SOAP扩展以在自定义全局异常处理程序中处理Web服务异常。有关更多信息,请参见处理和抛出XML Web服务中的异常


14

如果有人想了解微软在这个主题上的观点,请参见此处:"处理和抛出XML Web服务中的异常"。

以下是相关部分:

Web应用程序可以由多个XML Web服务组成,但Global.asax文件中的Application_Error事件不能用于全局异常处理。 XML Web服务的HttpHandler在执行XML Web服务时遇到任何异常都会将其转换为SOAP故障,然后再调用Application_Error事件。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接