Der beste Weg, eine Web-Service-Schnittstelle von einer WSDL-Datei ein Reverse-Engineering?
-
04-07-2019 - |
Frage
Ich habe eine WSDL-Datei für einen Web-Dienst auf einem System geerbt, die ich Zugang haben nicht für Entwicklung und Tests.
Ich brauche einen Web-Service zu generieren, die auf diese WSDL haftet. Der Wrapper ist .NET, aber wenn es ein einfacher Weg, dies mit einer anderen Plattform zu tun, könnten wir an, dass aussehen kann. Die Produktion Web-Service ist Java-basiert.
Was ist der beste Weg, dies zu gehen zu tun?
Hinweis: Die vererbten Wsdl scheint nicht mit kompatibel zu sein wsdl.exe , weil es entspricht nicht WS-I Basic Profile v1.1. Insbesondere die Gruppe, die sie weitergegeben erwähnte es einen anderen Standard verwendet, dass das Microsoft-Tool nicht unterstützt, aber sie haben nicht zu klären. Der Fehler wird im Zusammenhang mit einem erforderlichen Feld ‚Namen‘:
Error: Element Reference '{namespace}/:viewDocumentResponse' declared in schema type '' from namespace '' - the required attribute 'name' is missing
Aus Gründen der Klarheit willen, verstehe ich, dass ich einfach eine .NET-Wrapper-Klasse aus der WSDL-Datei erstellen kann, aber das ist nicht das, was ich brauche. Es ist wie folgt:
Update:. Der ursprüngliche Web-Service wurde mit Achse erstellt
Lösung
Wir verwenden WSCF - Web Services Contract First Tool aus Thinktecture zu tun Entwicklung Web-Service-Erstellung XSD-Schemas und dann Service-Interfaces zu erzeugen mit diesem Tool. Es kann nützlich sein, um Service-Schnittstellen von WSDL zu generieren, aber ich habe das noch nicht selbst ausprobiert.
Andere Tipps
Sie können nützlich finden Sie die Kommandozeilen-Utility wsdl.exe
rel="noreferrer"> von .NET durch die /serverInterface
Option. Gemäß der Dokumentation:
Erzeugt Schnittstellen für die serverseitige Implementierung einer ASP.NET Web Bedienung. Eine Schnittstelle erzeugt für jede Bindung in dem WSDL-Dokument (e). Die WSDL allein implementiert die WSDL Vertrag (Klassen, die die Umsetzung Schnittstelle sollte nicht enthalten entweder von die folgend auf den Klassenmethoden: Web-Service-Attribute oder Serialisierung Attribute, die Änderung der WSDL-Vertrag). Kurzform '/ Si'.
Ja - Sie können WSCF verwenden (wie pro oben) Server-Seite Code zu generieren. Die tatsächliche URL kann dann auf die Test-URL-zu-Punkt überschrieben, die Sie verwenden möchten.
Dies ist jedoch erzeugt nur ein Stummel. Sie haben noch das tatsächliche beispiel codieren GetCustomers () -Methode, die etwas suspekt ist, weil Sie keine Ahnung, wie die tatsächliche Umsetzung funktioniert.
Dann können Sie entweder mock diese oder einen einfachen ASP-Web-Server erstellen, um sie auszuführen.
Versuchen Sie, die Wrapper-Schnittstelle Mock mit RhinoMocks und StructureMap .
Nicht sicher, ob dies helfen wird,
, was ich getan habe, vor kurzem ist:
- Generieren CS-Datei des WSDL-Tool oder Visual Studio mit
- Ich habe es geändert eine Teilklasse sein
- Ich habe eine andere partielle Klasse erstellt, in dem alle ist es eine Linie tut hinzufügen zu sagen, dass die Klasse implementiert IWhatEver
- Ich habe eine Schnittstelle geschaffen, die die gleiche wie die generierte Proxy-Klasse ist (daher die die Proxy vollständig implementiert die Schnittstelle)
Ich habe dann einen Mockframework (Moq) in meinem Fall verwendet, die WebService zu verspotten, die ich benutzt habe dann schlecht bemannt Dependency Injection (die Mock in einen Konstruktor der Klasse unter Test bestehen) .. was verarbeiten kann eine Instanz von IWhatever
Test weg ..
Ich hoffe, das hilft