Как обрабатывать неправильную ошибку SOAP в WCF?

Я должен использовать стороннюю веб-службу, используя SOAP. Было легко заставить его работать с 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>

Ошибка в том, что у <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/'.

Я не могу изменить исходную веб-службу, но есть ли что-нибудь в WCF, которое я могу использовать для обработки этих сообщений об ошибках, не получая постоянно CommunicationException?


person chris166    schedule 18.02.2010    source источник


Ответы (2)


Да, но это не совсем элегантно. См. код инспектора сообщений в нижней части этого сообщения на форуме:

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

По сути, вы можете взять входящее сообщение и изменить его так, чтобы оно могло быть обработано WCF.

person WayneC    schedule 18.02.2010
comment
Спасибо, это было именно то, что мне было нужно! И достаточно элегантно :) - person chris166; 19.02.2010

Я считаю, что класс System.Web.Services.SoapHttpClientProtocol старой школы более терпим к нестандартным ошибкам, чем класс WCF System.ServiceModel.Channels.ServiceChannel.HandleReply / System.ServiceModel.Channels.MessageFualt. .CreateFault.

ПОМОЩЬ.

person Howard Hoffman    schedule 06.04.2010