jquery - jquery调用wcf服务时获取异常信息

标签 jquery wcf exception

我正在从 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/

相关文章:

javascript - 如何使用 jquery 将 css 应用于 div 选择器中的所有 html 元素

c# - 旧 C++ 应用程序和新 C# 应用程序之间的桥梁

java - 检查finally中是否执行了try或执行了catch

c++ - 这个 "trick"跨 DLL 边界抛出异常是个坏主意吗?

Android,处理 SQLiteConstraintException

javascript - 克隆容器以供重用,以后无需附加所有事件和元素

jquery - Facebox 轨道应用

javascript - Jquery如何在不指定列表中事件的情况下触发函数

WCF:如何使用 AllowInsecureTransport

wcf - 引用相同数据协定的多个 WCF 服务