我正在使用WCF连接到业务合作伙伴的web服务。web服务没有定义的错误约定-- WSDL中没有<wsdl:fault>元素。
当故障发生时,我会得到如下响应(为了可读性,名称空间被修剪掉了):
<s:Envelope>
<s:Body>
<Fault>
<faultcode>xxx</faultcode>
<faultstring>Business data error</faultstring>
<detail>
<Error>
<ErrorCode>xxx</ErrorCode>
<ErrorDescription>xxx</ErrorDescription>
</Error>
</detail>
</Fault>
</s:Body>
</s:Envelope>在我的代码中,我可以像这样捕获异常:
try
{
proxy.DoWork();
}
catch(FaultException fex)
{
...
}但是因为没有定义的FaultContract,所以我不能使用基于泛型的FaultException (如catch(FaultException<myFaultType>))。
长话短说,我需要能够检查在上面的catch的SOAP错误中返回的<Error>元素中的<ErrorCode>和<ErrorDescription>元素。
谢谢
发布于 2014-11-04 17:01:32
您可以使用响应的示例来生成带有命令xsd的模式:
// xsd foo.xml
<s:Envelope xmlns:s="foo.com">
<s:Body>
<Fault>
<faultcode>xxx</faultcode>
<faultstring>Business data error</faultstring>
<detail>
<Error>
<ErrorCode>xxx</ErrorCode>
<ErrorDescription>xxx</ErrorDescription>
</Error>
</detail>
</Fault>
</s:Body>
然后,您可以使用相同的命令生成序列化类:
// xsd foo.xsd /c
...
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true, Namespace="foo.com")]
[System.Xml.Serialization.XmlRootAttribute(Namespace="foo.com", IsNullable=false)]
public partial class Envelope {
...也许你必须编辑foo.c类的一些属性,但我认为这应该是工作。
https://stackoverflow.com/questions/20433627
复制相似问题