从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
属性与异常消息)。
我们需要做的第一件事就是设置< 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
非常感谢! – Martin 2010-01-10 11:34:48