处理WCF故障消息

时间:2019-10-01 21:14:46

标签: .net wcf fault

我使用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数组数据。

非常感谢您的帮助。

2 个答案:

答案 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);
            }

请随时告诉我是否有什么可以帮忙的。

相关问题