我正在从 jquery ajax 调用 WCF 服务。有时,服务会抛出一些自定义错误,当出现这种情况时,我需要获取该错误的消息。在我的 ajax 调用的错误函数中,我有以下代码:
error: function(data) {
alert("responseText: " + data.responseText);
}
抛出错误时的响应文本如下所示:
responseText: {"ExceptionDetail":{"HelpLink":null,"InnerException":null,"Message":"Denied",......}}
我想从“ExceptionDetail”获取“Message”,但我不知道该怎么做。
我的 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 接口(interface)),并将它们转换为 SOAP 错误 - .NET 异常的可互操作等效项。如果您知道另一端始终是 .NET 客户端,则可以轻松地将 .NET 异常转换为 FaultException<T>
其中 T 是您的 .NET 异常。
执行此操作时,您可以通过捕获 FaultException<T>
来捕获客户端上的异常。 ,及其 .Detail
属性应包含您所知的正常 .NET 异常(并且包含带有异常消息的 .Message
属性)。
关于jquery - jquery调用wcf服务时获取异常信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2036706/