什么处理在asp.net页面中对WebMethod发出的请求

时间:2012-08-26 11:56:39

标签: c# asp.net web-applications exception-handling webmethod

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

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 
    } 
});

1 个答案:

答案 0 :(得分:1)

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

  

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

摘自Handling and Throwing Exceptions in XML Web Services(我相信也有一些例子可以帮助你)

另外Rick Strahl(MVP)不久前在这个主题上写了这个问题,它解决了原位问题,但没有解决你在全球范围内管理问题的需要http://www.west-wind.com/weblog/posts/2005/Jan/29/NET-Web-Services-and-unhandled-Exceptions

此帖子应指导您根据自己的要求为全局错误处理构建soap扩展程序http://geekswithblogs.net/pavelka/archive/2005/09/05/HowToCreateAGlobalExceptionHandlerForAWebService.aspx