如何在global.asax中捕获AJAX WebMethod错误?

时间:2011-06-29 15:44:36

标签: asp.net ajax error-handling error-logging webmethod

我正在使用在我的ASP.net应用程序中捕获global.asax中的错误的常见做法。在global.asax中,我有一个函数Application_Error,它将错误记录到数据库中。

这非常适合记录用户请求页面时发生的错误。

但是,当从客户端调用的异步方法(使用[WebMethod]属性修饰的方法)抛出异常时,这没有任何帮助。异常只是冒泡并且可能会返回到客户端代码,但我希望自动在服务器上运行错误处理代码,类似于在global.asax中记录页面错误的方式。

我如何做到这一点?一种方法是使用try-catch包装每个异步方法,但这对我来说似乎不是一个好的解决方案。

2 个答案:

答案 0 :(得分:0)

一个选项是创建一个ASP.NET output filter,它拦截并记录ASP.NET发送给客户端的WebMethod异常。这是基本的想法:

  1. 创建一个Stream的子类,用于捕获响应的内容。
  2. 当流关闭时,检查响应是否具有500状态代码以及"jsonerror: true"标头。如果是,则响应包含WebMethod异常;记录异常。
  3. 在Global.Application_PostMapRequestHandler中,安装此类的实例作为JSON请求的输出过滤器。
  4. 有关完整源代码,请参阅this StackOverflow answer

答案 1 :(得分:-2)