Mar*_*tin 4 wcf jquery exception-handling
我从jquery ajax调用WCF服务.有时服务会抛出一些自定义错误,当它发生时,我需要获取该错误的消息.在我的ajax调用的错误函数中,我有以下代码:
error: function(data) {
alert("responseText: " + data.responseText);
}
Run Code Online (Sandbox Code Playgroud)
抛出错误时的responseText看起来像:
responseText: {"ExceptionDetail":{"HelpLink":null,"InnerException":null,"Message":"Denied",......}}
Run Code Online (Sandbox Code Playgroud)
我想从"ExceptionDetail"获取"消息",但我不知道该怎么做.
我的WCF服务看起来像这样,测试它我只是抛出一个错误:
[OperationContract]
[WebGet(ResponseFormat = WebMessageFormat.Json)]
public string myFunction(string id)
{
throw new Exception("Denied");
}
Run Code Online (Sandbox Code Playgroud)
如何获取错误消息?
默认情况下,WCF 不会返回任何异常细节 - 这是设计所需的功能,以免向可能的攻击者泄露太多信息.
如果要启用详细的异常消息,可以通过在服务器端启用行为来执行此操作:
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior name="debugBehavior">
<serviceDebug includeExceptionDetailInFaults="True" />
</behavior>
</serviceBehaviors>
</behaviors>
<services>
<service name="YourService"
behaviorConfiguration="debugBehavior">
.....
</service>
</services>
Run Code Online (Sandbox Code Playgroud)
但即使是现在 - 您需要知道WCF应该是可互操作的,因此客户端可能无法在.NET上运行 - >因此您不能简单地抛弃异常 - 这是.NET特定的构造.
您最好的选择是捕获服务器上的所有异常(使用例如IErrorHandler接口),并将它们转换为SOAP错误 - .NET异常的可互操作等效项.如果您知道另一端始终是.NET客户端,则可以轻松地将.NET异常转换为FaultException<T>T是您的.NET异常.
执行此操作时,您可以通过捕获来捕获客户端上的异常FaultException<T>,并且其.Detail属性应该包含正常的.NET异常(并且包含.Message带有异常消息的属性).