2017-05-06 2 views
0

ich arbeite auf einem Web Service (SOAP), und ich kann die Web-Anwendung nicht Referenz Ich versuche, die Antwort SOAP-Massage zu serialisiert, aber ich bekomme diese Fehlermeldung:Probleme Umwandlung SOAP C# Klasse

http://schemas.xmlsoap.org/soap/envelope/ '> wurde

nicht erwartet

ich verwende diese:

XmlSerializer serializer = new XmlSerializer(typeof(SearchFlightResponse));      
     SearchFlightResponse result = (SearchFlightResponse)serializer.Deserialize(XmlReader.Create("file:///D:/SR_response.xml")); 

und dies ist die SOAP-Antwort: XML

+0

zeigen Sie Ihre SearchFlightResponse Klassencode –

+0

https://ws.epower.amadeus.com/demo. WS/EpowerService.asmx? Op = SearchFlight –

Antwort

1

Sie können einen SOAP-Umschlag nicht direkt in einen benutzerdefinierten Typ deserialisieren. Sie hätten das XML analysiert und die Daten extrahiert, dann manuell eine Instanz Ihres Typs erstellt oder einen extrem komplexen benutzerdefinierten XML-Serializer erstellt.

Sie können sich Arbeitstage ersparen, wenn Sie diesen Service als Service-Referenz hinzufügen. Sie erhalten einen Proxy-Client, mit dem Sie Anrufe tätigen können, als wäre es irgendein anderes Objekt, aber der Web-Service ruft Sie an.

Klicken Sie in Ihrem Projekt mit der rechten Maustaste auf und wählen Sie Add Service Reference.... Int der Address Feld setzen die WSDL-Lage des Service, der dies:

https://ws.epower.amadeus.com/demo.WS/EpowerService.asmx?wsdl 

Sie werden wahrscheinlich wollen den Namespace von ServiceReference1 zu EpowerSvc ändern oder was auch immer - nur nicht verwenden einen gepunkteten Namen (dh: Epower .Bedienung).

Jetzt können Sie einen Client erstellen und Methoden aufrufen. Ich bin nicht sicher, welche Methode Sie von Ihrem Beispielcode anrufen, aber ich vermute, es ist SearchFlight:

EpowerSvc.EpowerServiceSoapClient client = new EpowerSvc.EpowerServiceSoapClient(); 
SearchFlightCalendarResponseOTA_AirLowFareSearchRS result = client.SearchFlight(someparam, someparam2, someparam3); 

//use result 
result.Items... 
+0

Das war die erste Sache, die ich tat, aber wenn ich Anfrage mache, bekomme ich den Fehler: Xml-Attribut sind nur erlaubt, wenn der umschlossene Modus True ist –

+1

Ich weiß nicht, ob dies helfen wird, aber wann Fügen Sie die Service-Referenz hinzu, klicken Sie auf die Schaltfläche Erweitert, und aktivieren Sie das Kontrollkästchen "Nachrichtenverträge immer generieren". – Crowcoder