WCF故障异常不会在客户端上显示soap服务的详细信息

时间:2011-02-25 16:05:04

标签: wcf

我们为服务提供了REST和SOAP端点,因此我们使用WebFaultException传递友好消息。这对于REST调用非常有用,而不是SOAP调用。下面是跟踪,清楚地显示了“detail”元素中的友好消息。但是在客户端上引发的FaultException在消息中具有http状态代码描述 - 而不是从服务引发的真实消息。有没有办法在客户端上显示预期的消息?

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
   <s:Header></s:Header>
   <s:Body>
      <s:Fault>
         <faultcode xmlns:a="http://schemas.microsoft.com/2009/WebFault" xmlns="">a:BadRequest</faultcode>
         <faultstring xml:lang="en-US" xmlns="">Bad Request</faultstring>
         <detail xmlns="">
            <string xmlns="http://schemas.microsoft.com/2003/10/Serialization/">Country code must be 3 characters.</string>
         </detail>
      </s:Fault>
   </s:Body>
</s:Envelope>

此外,这是在.net 4.0中我们正在使用Castle的WCF工具(DefaultServiceModel和RestServiceModel)。

1 个答案:

答案 0 :(得分:12)

WCF将 - 默认情况下并按设计 - 出于安全原因不报告详细的错误信息。它基本上只会告诉你“服务器出了问题 - 运气不好”。

您可以 - 出于开发和测试目的 - 启用更详细的错误信息,但您应该将其关闭以进行生产。

要启用它,请在服务器上使用服务行为:

<system.serviceModel>
   <behaviors>
      <serviceBehaviors>
         <behavior name="DetailedDebugging">
             <serviceDebug includeExceptionDetailInFaults="True" />
         </behavior>
      </serviceBehaviors>
   </behaviors>

   <services>
      <service name="YourService"
               behaviorConfiguration="DetailedDebugging" >
          ....
      </service>
   </services>
</system.serviceModel>

现在,您的服务应该报告详细的SOAP错误,包括所有详细信息,一直回到您的客户端应用程序。

更新:如果我没记错,在处理标准(非打字)FaultException时,您可以轻松访问FaultCode和{{1}等内容等等,但是消息细节有点麻烦 - 尝试这样的事情:

FaultReason

这是否允许您访问SOAP错误的详细描述?