【问题标题】:What handles requests made to a WebMethod in asp.net page什么处理对 asp.net 页面中的 WebMethod 的请求
【发布时间】:2012-08-26 11:56:39
【问题描述】:

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

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

【问题讨论】:

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


    【解决方案1】:

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

    一个 Web 应用程序可以由多个 Web 服务组成。然而, Global.asax 语法文件中的 Application_Error 事件不能 用于全局异常处理。用于 Web 的 HttpHandler services 使用 Web 服务运行时发生的任何异常 在 Application_Error 之前执行并将其转换为 SOAP 错误 事件被调用。构建 SOAP 扩展来处理 Web 服务 全局异常处理程序中的异常。 SOAP 扩展可以检查 ProcessMessage 方法中是否存在异常。之内 ProcessMessage 方法,检查 Exception 属性 当 Stage 属性设置为 AfterSerialize 时传递了 SoapMessage。 有关 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

    【讨论】:

    • 实际上,这些帖子是在讨论 SOAP 异常,在我的例子中是 HTTP GET/POST,所以抛出的异常是状态码 500,而不是 SOAP 异常/错误。 :( 不过还是谢谢!
    • 有趣 - HTTP GET/POST 消息是什么样子的 - 你能发布吗?你是如何调用 WebMethod 的?
    • 我用 JQuery 从客户端调用它:'$.ajax({ type: "POST", url: "SomePage.aspx/SomeMethod", dataType: "json", contentType: "application/json ; charset=utf-8", 成功: function (response) { someVar = response.d; }, error: function (a, b, c) { console.log(a); // 句柄 } });'但是,我希望在服务器端捕获错误。
    • 感谢您提供的额外信息 - 呼叫是否总是失败(即您有时能否发出成功的请求?)
    • 是的,当然。大多数时候请求是成功的。请求返回序列化的 JSON 数据。
    猜你喜欢
    • 2013-06-07
    • 1970-01-01
    • 1970-01-01
    • 2012-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多