我们为服务提供了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>
Run Code Online (Sandbox Code Playgroud)
此外,这是在.net 4.0中,我们正在使用Castle的WCF工具(DefaultServiceModel和RestServiceModel).
mar*_*c_s 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>
Run Code Online (Sandbox Code Playgroud)
现在,您的服务应该报告详细的SOAP错误,包括所有详细信息,一直回到您的客户端应用程序.
更新:如果我没有记错,处理标准(非类型化)时FaultException
,你很容易获得喜欢的内容FaultCode
和FaultReason
等,但该消息的细节有点麻烦得到它-尝试是这样的:
try
{
// your service call here
}
catch(FaultException fe)
{
FaultCode fc = fe.Code;
FaultReason fr = fe.Reason;
MessageFault mf = fe.CreateMessageFault();
if(mf.HasDetail)
{
string detailedMessage = mf.GetDetail<string>();
}
}
Run Code Online (Sandbox Code Playgroud)
这是否允许您访问SOAP错误的详细描述?
归档时间: |
|
查看次数: |
9925 次 |
最近记录: |