2 Stimmen

Mehrere WSDL-Versionen auf dasselbe Objekt aufteilen

Ich verwende einen Webservice eines anderen Unternehmens, der in mehreren Versionen läuft. Jede neuere Version hat nur neue Felder/Objekte hinzugefügt, aber einige der Elementnamen geändert.

Ich möchte die Möglichkeit haben, jede der Versionen mit demselben Code zu verwenden.

Konkret: In einer Version gibt eine Suchmethode zurück: <searchReturn><SummaryData_Version1Impl /><SummaryData_Version1Impl /></searchReturn>

und in einer anderen Version: <searchReturn><SummaryData_Version2Impl /><SummaryData_Version2Impl /></searchReturn>

Daher kann der von wsdl.exe generierte Proxy aufgrund dieser Elementänderung nicht mit beiden arbeiten.

  1. Die beste Lösung wäre, das andere Unternehmen zu veranlassen, seinen Dienst so zu ändern, dass die Elementnamen nicht mehr geändert werden, aber das ist in dieser Situation eher unwahrscheinlich
  2. Ich denke, meine beste Wette für eine funktionierende Lösung ist zu senden und erhalten die SOAP-Anfrage manuell, und ändern Sie die Elementnamen dann deserialize manuell, die bisher wie es funktionieren würde schien. -- Aber würde ziemlich viel Arbeit erfordern
    • Ich habe gerade bestätigt, dass das manuelle Laden der XML-Datei (nach dem Ändern des Elementnamens mit string.Replace) jede Version des Dienstes in die benötigten Objekte deserialisiert
  3. Alternativ können Sie auch den generierten Proxy ändern:
    • Wenn ich die Soap-Antwort abfangen und ändern könnte, bevor der generierte Proxy versucht, sie zu deserialisieren
    • Wenn ich das XmlTypeAttribute des Dienstes zur Laufzeit ändern könnte
  4. Ich habe auch daran gedacht, eine Reihe von Schnittstellen zu haben, so dass jede Klasse die Schnittstellen der älteren Klassen hat. class Data3 : IData3, IData2, IData1 Das würde es mir erlauben, zumindest nach unten zu werfen. Und setzen Sie jede Version in einem anderen Namensraum.
  5. Es gibt ein paar Enten-Tipptechniken, die ich mir gerade angeschaut habe, die vielleicht funktionieren könnten, aber weniger zuverlässig erscheinen.
  6. Gibt es eine andere Möglichkeit, aus mehreren Elementnamen zu deserialisieren?

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X