我们为服务提供了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)。
答案 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错误的详细描述?