【问题标题】:Jquery ajax() handling WCF errors?Jquery ajax() 处理 WCF 错误?
【发布时间】:2011-08-24 04:23:06
【问题描述】:

如何处理 Jquery ajax()method 中 WCF 服务程序 (RESTful) 返回的错误/异常?

假设我打开了includeExceptionDetailInFaults="true" 并且我使用了

error: function(XMLHttpRequest, textStatus, errorThrown) {
        alert(XMLHttpRequest.responseText);
 }

我唯一得到的是一个 HTML 字符串(HTML 页面),其中隐藏着错误;;

我想显示类似的错误

  1. 找不到服务(HTTP 400 和 500 错误)
  2. WCF 向 客户页面 (javascript)

我该怎么做?

【问题讨论】:

    标签: jquery wcf


    【解决方案1】:

    includeExceptionDetailsInFaults 更像是一种调试工具,用于处理未经处理的异常,而不是一种将错误实际传递给客户端的方法。这些类型的错误通常是 500 个内部服务器错误,其详细信息不应以任何方式泄露给客户端。对于 REST 服务,默认情况下一般将这些详细信息传递给调用者的方法是将它们作为文本/HTML 返回。

    然而,如果你试图从你的服务中返回逻辑错误,你应该想到 WebFaultException<T> 的实例,其中 T 可以是一个简单的字符串消息,或者,如果你想要更复杂的东西,可以是一个类,它将根据为您的服务端点配置的任何序列化,将其序列化为结构化格式。你也可以在WebFaultException<T>的构建过程中设置响应状态码。

    如果您希望对所有未处理的异常进行通用处理以返回结构化内容类型表示和状态代码,您需要编写自己的 IErrorHandler 并将未处理的异常类型转换为 WebFaultException<T> 在您的 @987654326 @ 执行。

    【讨论】:

    • 任何带有 Jquery ajax() 方法的 IErrorHandler 的实际例子?
    • IErrorHandler 与任何特定的客户端库没有紧密的联系。您决定要返回给客户端的错误详细信息对象的“形状”,然后您可以在 jQuery 故障处理程序中读取它。例如,最简单的做法是让 IErrorHandler::Provide fault 只返回 WebFaultException ,您只需将 exception.ToString() 放入其中并带有 400 错误请求。然后在 jQuery 中,您只需显示通过读取 XHR 的 responseText 属性返回的内容。
    • WebFaultException 仅在 4.0 中不是吗?
    • @AlexanderN - 是的,没错。在 4.0 之前,您必须使用自定义 IErrorHandler 可以监视的自定义 Exception 子类自己推出此解决方案 - 或者 - 在您自己的方法中的 try/catch 中设置您自己的失败 HTTP 状态/主体,这就是……呸。 :)
    【解决方案2】:

    我没有专门针对 WCF 的请求尝试过这个,但这适用于在 ASP.NET aspx 页面中调用 WebMethod:

                error: function(e) {
                    var errorObject = JSON.parse(e.responseText);
                    if (errorObject.ExceptionType === 'MyNamespace.MyException') {
                       //do stuff for MyException
                    }
                    else {
                        //do regular exception handling
                    }
                }
    

    【讨论】:

      猜你喜欢
      • 2012-02-25
      • 2011-03-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-04
      • 2015-09-26
      • 2011-09-09
      相关资源
      最近更新 更多