Mehrere Namensräume in einer Seifenfehlermeldung führen dazu, dass die Deserialisierung von FaultException fehlschlägt

Wir stellen eine Verbindung zu einem Webdienst her und die Fehlermeldung, die wir zurückerhalten, wird (überhaupt) nicht deserialisiert, und keine Version der Klasse, die ich erstellen kann, wird korrekt deserialisiert. Wir haben keine Kontrolle über die Server-Seite der Dinge. Der Server lässt keine Erkennung zu, daher führt das Hinzufügen von WSDL an das Ende der URL des Endpunkts zu einem Fehler und nicht zu einer WSDL.

[Fiddler] [1] zeigt die Fehlermeldung wie folgt an:

<?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>

Noch keine Klasse, die wir erstellt haben (versuchen Sie xsd.exe, svcutil und andere, einschließlich Code, den wir von Grund auf neu geschrieben haben), kann es deserialisieren, wenn wir versuchen, es zu fangen mit:

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. 
  }

Es wird nur der Basis-FaultException-Catch aufgerufen, was bedeutet, dass wir den Inhalt der gesendeten FaultMessage verlieren. Einige der Klassen, die ich geschrieben habe, werden sehr genau mit dem obigen Beispiel serialisiert, können es jedoch nicht deserialisieren, sodass wir den Verdacht haben, dass ein Namespace-Problem vorliegt.

Fragen:

1 - Wie würdest du das schreiben?

2 - Ist dies ein häufiger Fehler bei WCF?

[1]http://www.fiddler2.com/fiddler2/ Geiger

Antworten auf die Frage(3)

Ihre Antwort auf die Frage