以及如何解决它。我想记录每个抛出的异常以进行维护。
3 回答
这是 .Net 中的一个已知问题 - Web 服务永远不会触发 Application_Error。不确定是否有任何原因是设计使然,但它就是行不通。
几年前,杰夫·阿特伍德 ( Jeff Atwood) 有一篇关于此的帖子(和后续文章),其中有以下想法:
- 在每个 Web 服务方法周围放置一个 try-catch 块
- 使用外观设计模式并在父对象中包含 try-catch
- 编写自定义 SOAP 扩展或 HTTPModule
我唯一关心的是第一个,尽管这看起来工作量很大。
笔记:
如果您的 Web 应用程序包含 XML Web services,则不能使用 Error 事件来处理这些服务的全局异常。XML Web services 的 HTTP 处理程序使用 XML Web services 中发生的任何异常,并在调用 Error 之前将其转换为 SOAP 错误。要处理 XML Web 服务异常,请构建一个 SOAP 扩展以在自定义全局异常处理程序中处理 Web 服务异常。有关详细信息,请参阅XML Web 服务中的处理和引发异常。
对于任何在此主题上寻找 Microsoft 信息的人,请参阅此处:“在 XML Web 服务中处理和引发异常”。
这是相关部分:
一个 Web 应用程序可以由多个 XML Web services 组成,但是 Global.asax 文件中的 Application_Error 事件不能用于全局异常处理。XML Web services 的 HttpHandler 使用 XML Web services 执行时发生的任何异常,并在调用 Application_Error 事件之前将其转换为 SOAP 错误。