我使用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数组数据。
非常感谢您的帮助。
答案 0 :(得分:0)
浏览在客户端生成的与预期故障匹配的代码。然后,您需要使用它来键入要捕获的FaultException,例如
catch(FaultException<YourExceptionType> e)
{
... // Access your custom fault properties
}
有关更多示例,请查看FaultException<TDetail>
的{{3}}。
答案 1 :(得分:0)
您的服务似乎使用了错误合同来包装错误的详细信息。故障合同是自定义类型。我们可以在客户端使用Try-Catch语句捕获这种强类型。
另外,故障合同和服务合同在客户端和服务之间共享,也就是说,它们在客户端是已知的。服务合同和故障合同也可以通过添加服务引用来生成。
Try
{
}
catch (FaultException<FatalException> e)
{
FatalException fe = e.Detail;
Console.WriteLine(e.Message);
}
请随时告诉我是否有什么可以帮忙的。