从jquery调用wcf服务时获取异常消息

问题描述:

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

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

我怎样才能得到错误的信息?

默认情况下,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异常转换为其中T是.NET异常的FaultException<T>

当你这样做,你可以通过捕获FaultException<T>赶在客户端上的例外,它的.Detail属性应包含正常的.NET异常,因为你知道它(并包含.Message属性与异常消息)。

+0

非常感谢! – Martin 2010-01-10 11:34:48

我们需要做的第一件事就是设置< serviceDebug includeExceptionDetailInFaults = “TRUE” web.config中如上面所提到/ >通过像marc_s:在jQuery的水平

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

除此之外在错误的一部分,你需要解析包含异常的错误响应,如:

.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