3

我正在尝试实现通用错误处理。

public partial class SomePage : System.Web.UI.Page
{
//...
    [WebMethod()]
    public static int SomeMethod()
    {
        //... some code
        //... exception
    }
//...
}

可以使用 global.asax 处理常规请求,但静态 WebMethods 不会通过 Application_BeginRequest 或 Application_Error。我尝试编写一个属性,从 ExceptionFilterAttribute 派生并使用 OnException 覆盖,但它也不起作用。

那么谁来处理这些请求呢?

客户端调用是通过下面的 jQuery ajax 请求进行的:

$.ajax({
    type: "POST",
    url: "SomePage.aspx/SomeMethod",
    dataType: "json",
    contentType: "application/json; charset=utf-8",
    success: function (response) {
        someVar = response.d;
    },
    error: function (a, b, c) {
        console.log(a); 
        // handle 
    } 
});
4

1 回答 1

1

从文档看来,您需要构建一个 SOAP 扩展来全局处理错误 - 有用的片段和下面的链接:

一个 Web 应用程序可以由多个 Web 服务组成。但是,Global.asax 语法文件中的 Application_Error 事件不能用于全局异常处理。Web 服务的 HttpHandler 使用在 Web 服务执行时发生的任何异常,并在调用 Application_Error 事件之前将其转换为 SOAP 错误。构建 SOAP 扩展以在全局异常处理程序中处理 Web 服务异常。SOAP 扩展可以检查 ProcessMessage 方法中是否存在异常。在 ProcessMessage 方法中,检查当 Stage 属性设置为 AfterSerialize 时传递的 SoapMessage 的 Exception 属性。有关 SOAP 扩展的详细信息,请参阅使用 SOAP 扩展的 SOAP 消息修改。

摘自XML Web Services 中的处理和抛出异常(我相信在此过程中也有一些示例可以帮助您)

此外,Rick Strahl (MVP) 不久前就该主题写了这篇文章,它就地解决了问题,但没有解决您在全球范围内管理问题的需要http://www.west-wind.com/weblog/posts/2005/ Jan/29/NET-Web-Services-and-unhandled-Exceptions

这篇文章应该指导您根据您的要求为全局错误处理构建一个肥皂扩展http://geekswithblogs.net/pavelka/archive/2005/09/05/HowToCreateAGlobalExceptionHandlerForAWebService.aspx

于 2012-08-26T13:00:58.837 回答