我们正在连接到一个 Web 服务,我们得到的错误消息没有反序列化(根本没有),而且我可以制作的任何版本的类都不会正确反序列化。我们无法控制服务器端的事情。服务器不允许发现,因此将 ?WSDL 添加到端点 URL 的末尾会导致错误,而不是 WSDL。
[Fiddler][1] 显示返回的故障消息如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:eGov="http://eGov.gov" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Body>
<soapenv:Fault>
<faultcode>Client</faultcode>
<faultstring/>
<detail>
<eGov:eGov2Exception>
<eGov:ErrorClassification>SOME_ERROR</eGov:ErrorClassification>
<eGov:ErrorCode>SOME_ERROR_CODE</eGov:ErrorCode>
<eGov:ErrorMessage>Your request was unsuccessful. blah blah blah.</eGov:ErrorMessage>
</eGov:eGov2Exception>
</detail>
</soapenv:Fault>
</soapenv:Body>
</soapenv:Envelope>
然而,当我们尝试捕获它时,我们创建的任何类(尝试 xsd.exe、svcutil 和其他包括我们从头编写的代码)都无法反序列化它:
catch (FaultException<eGov2ExceptionType> exp)
{
// Never stops here.
}
catch (FaultException<AllOtherAttemptedClasses> exp)
{
// Never stops here.
}
catch (SoapException se)
{
// Never stops here.
}
catch (FaultException exp)
{
//Always gets caught here.
}
只有基本的 FaultException catch 会被调用,这意味着我们丢失了正在发送的 FaultMessage 的内容。我编写的一些类将序列化非常接近上面的示例,但无法反序列化它,所以我们怀疑存在命名空间问题。
问题:
1 - 你会怎么写这个?
2 - 这是 WCF 的常见错误/问题吗?