如何在WCF中处理不正确的SOAP错误?

chr*_*166 3 wcf soap wcf-client

我必须使用SOAP使用第三方Web服务.很容易让它与WCF一起工作,但现在我遇到了SOAP故障的问题.该服务发送给我一个不正确的SOAP错误:

<?xml version="1.0" encoding="utf-8" ?>
<SOAP-ENV:Envelope 
    SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" 
    xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
    <SOAP-ENV:Body>
        <SOAP-ENV:Fault>
            <SOAP-ENV:faultcode>14</SOAP-ENV:faultcode>
            <SOAP-ENV:faultstring>Unknown Function</SOAP-ENV:faultstring>
        </SOAP-ENV:Fault>
    </SOAP-ENV:Body>
</SOAP-ENV:Envelope>
Run Code Online (Sandbox Code Playgroud)

错误是<faultcode>必须没有命名空间:

System.ServiceModel.CommunicationException : Server returned an invalid 
SOAP Fault. Please see InnerException for more details.
    ----> System.Xml.XmlException : Start element 'faultcode' from namespace 
    '' expected. Found element 'SOAP-ENV:faultcode' from namespace 
    'http://schemas.xmlsoap.org/soap/envelope/'.
Run Code Online (Sandbox Code Playgroud)

我无法更改原始的Web服务 - 但是WCF中是否有任何东西可以用来以某种方式处理这些错误消息而无需一直处理CommunicationException

Way*_*neC 12

是的,但它不是很优雅.请参阅此论坛帖子底部的消息检查器代码:

http://social.msdn.microsoft.com/Forums/en-US/wcf/thread/435850aa-bf74-4158-a29a-256135207948

基本上,您可以接收传入消息并对其进行更改,以便WCF可以处理它.