![](/img/trans.png)
[英]WCF - Replacing Fault node of Fault SOAP message with a custom fault message
[英]Processing WCF Fault Message
我正在使用 Visual Studio 2017 通过 .NET/C# 使用 WCF web 服务。以下是故障的详细部分:
<detail>
<FatalException>
<errorCode>E 0008</errorCode>
<message>The business policies have been violated.</message>
<responseCode>FATAL_INT_ERROR</responseCode>
<validationErrors>
<associatedSeverity>0</associatedSeverity>
<attributeName>userld, process number</attributeName>
<attributeValue>NNNN******NNNN</attributeValue>
<errorCode>B 014</errorCode>
<errorMessage>Duplicate Transaction</errorMessage>
<objectName>ObjABCD</objectName>
</validationErrors>
<validationErrors>
<associatedSeverity>0</associatedSeverity>
<attributeName>userld, process number</attributeName>
<attributeValue>NNNN******NNNN</attributeValue>
<errorCode>AB 015</errorCode>
<errorMessage>Refer to procedure guide</errorMessage>
<objectName>ObjXYZ</objectName>
</validationErrors>
</FatalException>
</detail>
我可以使用以下代码片段访问消息“违反了业务政策”:
catch(FaultException e)
{
string ERRORMSG = e.Message
}
我不知道如何获取validationErrors 数组数据。
任何帮助是极大的赞赏。
查看客户端生成的代码,查找与预期故障匹配的类型。 然后,您需要使用它来键入要捕获的 FaultException,例如
catch(FaultException<YourExceptionType> e)
{
... // Access your custom fault properties
}
查看FaultException<TDetail>
的文档以获取更多示例。
您的服务似乎使用错误合同来包装错误的详细信息。 Fault 合约是一种自定义类型。 我们可以在客户端使用 Try-Catch 语句来捕获这种强类型。
此外,Fault Contract 和 Service Contract 在客户端和服务之间共享,即在客户端是已知的。 服务契约和故障契约也是通过添加服务引用生成的。
Try
{
}
catch (FaultException<FatalException> e)
{
FatalException fe = e.Detail;
Console.WriteLine(e.Message);
}
如果有什么我可以帮忙的,请随时告诉我。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.