Generieren von c# - Klassen aus wsdl
Möchte ich generieren von C# - Klassen aus wsdl-url in ASP.NET Core 2.1.
WSDL-url ist:https://airarabia.isaaviations.com/webservices/services/AAResWebServices?wsdl
Habe ich "Microsoft WCF Web Service-Referenz-Anbieter" tool zum generieren von C# - Klasse und bekam folgende Fehlermeldung:
Fehler: Kein code generiert wurde.
Wenn Sie versuchen, generieren einen Kunden, das könnte sein, weil die Metadaten der Dokumente enthielt keine gültigen Verträge oder Dienstleistungen
oder weil alle Verträge/Dienstleistungen entdeckt wurden, gibt es in der /reference assemblies. Stellen Sie sicher, dass Sie bestanden alle Metadaten-Dokumente zum Werkzeug.
Getan.
Jede Lösung wird sein, zu schätzen wissen.
- "das könnte sein, weil die Metadaten der Dokumente enthielt keine gültigen Verträge oder Dienstleistungen, oder weil alle Verträge/Dienstleistungen entdeckt wurden, gibt es in der /reference assemblies. stellen Sie sicher, dass Sie bestanden alle Metadaten-Dokumente für das tool. " Haben Sie überprüft?
- Laden Sie die WSDL und die zugehörige XSD-Dateien auf Ihre lokale und dann erneut versuchen, mit der lokalen version. Es sollte funktionieren.
- Ich habe versucht, diese Lösung und es hat nicht funktioniert.
- Downvoters, es sei denn, Sie arbeiteten mit GDS und airlines in der Vergangenheit, jetzt aufhören. Airlines sind zu wichtig, um sich mit solchen Feinheiten wie folgt etablierten standards.
- Fluggesellschaften spielen Locker und schnell mit web-standards. Es kann gut sein, dass die WSDL ist ungültig. Versuchen svcutil.exe` generieren der Klassen. Wenn Sie keine Fehler erhalten, werden Sie wissen, es ist ein problem mit .NET Core WCF-Unterstützung. Die gute Nachricht ist, können Sie die Wiederverwendung der erzeugten Klassen in Ihrem .NET-Core-Projekt
- wenn
svcutil.exe
beschwert sich aber, es könnte bedeuten, dass die Fluggesellschaft keine Unterstützung für SOAP und WS -* - standards. Zum Beispiel, Sabre nicht, bietet ebXML über SOAP statt. Andere Leistungen, z.B. Farelogix nicht einmal Respekt vor Ihren eigenen XSDs - Danke @panagiotis-kanavos. Gibt es eine Lösung?
- Ich denke, es gibt keinen Weg, um einen "deep dive". Sie müssen herausfinden, ob Sie tatsächlich tun können, was Sie wollen mit den Daten, die Sie erhalten.
- eine andere Möglichkeit ist, dass die airline Bucht eine WSDL, die nur konsumiert werden, mit der älteren ASMX-stack, die nicht Folgen Sie den WS -* - standards - Sie wussten es damals noch nicht. Sie können die
Add Service Reference ...
Fenster in eine ASP.NET (nicht Core) - Anwendung hinzufügen, um eine service-Referenz, wählen Sie "Erweitert", und fügen Sie einen "Web-Service". - Ich Mach das in ASP.NET (nicht Core) und c# classess erfolgreich erzeugt, aber in .NET-Core-es gibt keine "System.Web.Dienstleistungen" Bibliothek!
- Hoppla, es ist eigentlich noch schlimmer. Die WSDL-Referenzen der OpenTravel-Schemata, aber keine links zu Ihnen. Sie können
svcutil.exe
wenn es mit einer http-url zum generieren der proxy-Klassen - Mit svcutil.exe: - Fehler: Nicht-abrufen von Metadaten aus dem airarabia.isaaviations.com/webservices/services/...
Du musst angemeldet sein, um einen Kommentar abzugeben.
Kurze Antwort
Öffnen Sie eine Entwicklung Eingabeaufforderung, und führen Sie zum generieren der proxy-Klassen:
Beachten Sie, dass ich verwendet
http
statthttps
. Das Zertifikat des Servers, wodurch Probleme mitsvcutil
. Kopieren Sie die Klassen in Ihrem Projekt-Ordner.Hinzufügen
System.ServiceModel.Primitives
von NuGet zum Projekt Abhängigkeiten. Da ASP.NET Kern nichtweb.config
Dateien, die Sie haben können, um zu erstellen die Bindungen sich beim erstellen der proxy-Klasse, z.B. :In den Bindungen
BasicHttpsBinding
verwendet wird, da keine Fluggesellschaft akzeptiert unverschlüsselte verbindungen. Sabre-erfordert TLS 1.2 oder höher.Erklärung
Airlines und GDS nicht so toll, auf folgenden web-Interoperabilität-standards. Sie sind groß genug, dass, wenn es irgendwelche änderungen gibt, ist es die travel-agent, der hat, um Platz für Sie. Sobald Sie geben Ihre standard, kümmern Sie sich nicht, es zu ändern entweder.
Dem OTA-standard und Sabre Umsetzung wurden zum Beispiel im Jahr 2003 gegründet und Verwendung von ebXML, einen alternativen Vorschlag zu SOAP, die nicht zu einem standard geworden. Dann Sie verwendet ebXML über SOAP mit Mechanismen, die nicht Teil der späteren SOAP-standards. Wenn die WS -* - standards erstellt wurden, das Chaos zu beheben und Interoperabilität sicherzustellen, dass Sie nicht einmal zu stören.
WSDL-Sie ist ähnlich wie Sabre. Es nutzt einige von OTA-Operationen wie OTA_PING und fügt eigene diejenigen. Zum Glück, es sind keine tool-Leistungsschalter wie anonyme innere Typen.
Du könnte Verwendung wsdl.exe zum erstellen einer ASMX-proxy, mit dem vor 2008 .NET stack. Das ist noch nicht portiert wurde .NET Core, soweit ich weiß, allerdings. Vielleicht es ist Teil des Windows Compatibility pack. Nachdem alle, es ist nicht kompatibel und veraltet vor 10 Jahren. ASMX noch nicht, hatte keine signifikante upgrades im Alter entweder. Ich haben laufen in der concurrency-Probleme mit deserializers in der Vergangenheit bei der Verwendung von ASXM-Dienste z.B. mit Amadeus.
Und dann gibt es solche, die nicht einmal Respekt vor Ihren eigenen XSDs, z.B. Farelogix. Sie zurückkehren können out-of-range-Werte für Aufzählungen und sagen "gut, der XSD -, dienen lediglich der information". Die
wsdl
- Datei ist deutlich gekennzeichnetnot for production use
Gibt es keine Allgemeine Lösung, leider. Hier sind einige Möglichkeiten:
wsdl.exe
- und ASMX-sind ausgeschlossen, wenn Sie verwenden möchten .NET Core. Sie werden zum wechseln der Volle Rahmen, wenn Sie haben, Sie zu benutzen.WARNUNG
Telefonieren bedeutet nicht, dass Sie mit dem Anbieter kommunizieren. Eines der wichtigsten Probleme mit ebXML über SOAP ist, dass der Körper ist OK, aber die Header, einschließlich derjenigen, die für die Authentifizierung verwendet wird, sind alle falsch. Dies bedeutet, dass man zum erstellen der Authentifizierung element
Weiteres Problem ist, dass die Authentifizierung Felder werden oft missbraucht, z.B. mit Authentifizierung Header, die wir in Betracht ziehen Sitzung Token. GDS noch verwenden mainframes und jene Sitzungs-Token, die oft anzeigen, um die tatsächlichen terminal-Sitzungen.
Dies bedeutet, dass man zum erstellen von Authentisierungs-Header manuell, anstatt auf WCF zu erstellen. Es bedeutet auch, dass Transaktionen stateful - hat man zum verfolgen der Sitzung verwendet wurde, bei dem die Buchung um zu buchen, überprüfen Sie, dass alle vorherigen Transaktionen abgeschlossen sind, bevor Sie neu gestartet etc.
Laden Sie Ihre WSDL-Dateien auf der lokalen. Führen Sie dann den folgenden Befehl ein:
Ändern namespace ein namespace Ihrer Wahl.
WSDL.exe ist Teil des Windows-SDK:
Mir war in
C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin
Dieser generiert die Klassen ohne Probleme. Getestet habe ich diese Lösung.
wsdl.exe
wird verwendet für ASMX Dienste. Diese Klassen sind nicht Teil der .NET Core.svcutil.exe
ist vorzuziehen?