【问题标题】:Get the message of exception when calling a wcf service from jquery从 jquery 调用 wcf 服务时获取异常消息
【发布时间】:2010-01-10 10:30:29
【问题描述】:

我从 jquery ajax 调用 WCF 服务。有时服务会抛出一些自定义错误,当它发生时,我需要获取该错误的消息。在我的 ajax 调用的错误函数中,我有以下代码:

            error: function(data) {
              alert("responseText: " + data.responseText);
            }

抛出错误时的 responseText 如下所示:

responseText: {"ExceptionDetail":{"HelpLink":null,"InnerException":null,"Message":"Denied",......}}

我想从“ExceptionDetail”中获取“消息”,但不知道该怎么做。

我的 WCF 服务看起来像这样,为了测试它我只是抛出一个错误:

[OperationContract]
[WebGet(ResponseFormat = WebMessageFormat.Json)]
public string myFunction(string id)
{
    throw new Exception("Denied");
}

如何获取错误消息?

【问题讨论】:

    标签: jquery wcf exception-handling


    【解决方案1】:

    默认情况下,WCF 将返回任何异常详细信息 - 这是一个设计所需的功能,以便不向可能的攻击者泄露太多信息。

    如果你想启用详细的异常消息,你可以通过在服务器端启用一个行为来做到这一点:

     <system.serviceModel>
        <behaviors>
          <serviceBehaviors>
            <behavior name="debugBehavior">
              <serviceDebug includeExceptionDetailInFaults="True" />
            </behavior>
          </serviceBehaviors>
        </behaviors>
    
        <services>
            <service name="YourService"
                     behaviorConfiguration="debugBehavior">
                 .....
            </service>
        </services>
    

    但即使是现在——你需要知道 WCF 应该是可互操作的,因此客户端可能不在 .NET 上运行——>因此你不能简单地抛出异常——这是 .NET 特定的构造。

    您最好的选择是捕获服务器上的所有异常(使用例如IErrorHandler 接口),并将它们转换为 SOAP 错误 - 可互操作的等价于 .NET 异常。如果您始终知道另一端是 .NET 客户端,则可以轻松地将 .NET 异常转换为 FaultException&lt;T&gt;,其中 T 是您的 .NET 异常。

    执行此操作时,您可以通过捕获 FaultException&lt;T&gt; 在客户端上捕获异常,并且它的 .Detail 属性应该包含您所知道的正常 .NET 异常(并且包含一个 .Message 属性异常消息)。

    【讨论】:

      【解决方案2】:

      我们需要做的第一件事是在 web.config 中设置 ,就像 marc_s 提到的那样:

      <serviceBehaviors>
       <behavior name="">
        <serviceMetadata httpGetEnabled="true" />
        **<serviceDebug includeExceptionDetailInFaults="true" />**
      </behavior>
      

      除了 jquery 级别的错误部分之外,您还需要解析包含异常的错误响应,例如:

       .error(function (response, q, t) {
            var r = jQuery.parseJSON(response.responseText);
          });
      

      然后使用 r.Message 你可以实际显示异常文本。

      看完整代码:http://www.codegateway.com/2012/04/jquery-ajax-handle-exception-thrown-by.html

      【讨论】:

        猜你喜欢
        • 2010-12-11
        • 2017-03-31
        • 1970-01-01
        • 2012-11-12
        • 2011-03-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多