SOAP in .NET Core?

Wie machen Sie SOAP in .NET Core? Gibt es Äquivalente von Apache CXF in .Net Core (nicht nur ein einfacher SOAP-Client, sondern ein voll ausgestatteter Stack)?

Sorry, wenn dies eine sehr grundlegende Frage ist, liefert meine bisherige Suche keine klare Antwort.

Microsoft plant derzeit nicht, ein SOAP-Server-Framework für .NET Core zu liefern. Weder der WCF ServiceHost noch ASMX sind verfügbar. Es ist zu früh, um zu sagen, welche der Nicht-Microsoft-Stacks die dominierende Rolle spielen werden.

Mit der Einführung von ASP.NET-Web-API und dem Aufstieg von REST-Endpunkten war WCF tot. Der WCF-Client ist eine Interop-Geschichte, keine fortlaufende Geschichte (vollständige Geschichte hier: http://blog.tonysneed.com/2016/01/06/wcf-is-dead-long-live-mvc-6/ )

Vor einigen Monaten haben WCF-Clients aufgrund einer Einschränkung (bei der Integration mit einem Java-Webdienst) eine Antwortklasse mit demselben Namen wie die Methode und im gleichen Namensraum erstellt. Wenn der WCF-Client eine Anforderung sendete, konnte die Serialisierung nicht durchgeführt werden – Die zugehörige Frage kann nicht in SO gefunden werden. Ich musste einen SOAP-HTTP-Client erstellen, der den HttpClient unterstreicht. Ich habe schließlich eine Open-Source-Version ( https://github.com/gravity00/SimpleSOAPClient ) veröffentlicht, die wir erfolgreich in der Produktion einsetzen und .NET Core- und Xamarin-Anwendungen unterstützen. Fühlen Sie sich frei, es zu versuchen. Ich empfehle Version 2.0.0-RC03 aufgrund einiger wesentlicher Verbesserungen seit Version 1.x.

In VS 2017 können Sie ab Dezember ’17 (Version 15.5) jetzt einen generierten WCF-Client mithilfe von WSDL zu einem Dienst aus einem .NET-Standard-Projekt mit Connected Services hinzufügen. Im Projektmappen-Explorer können Sie dorthin gelangen, indem Sie mit der rechten Maustaste auf “Abhängigkeiten” klicken, oder mit der rechten Maustaste auf das Projekt unter “Hinzufügen …”.

Hier haben Sie einen kleinen Trick, den ich als “Framework 452” in einer ASP.Net 5.0 Web App verwendet habe.

Leider funktioniert das neue “Add Connected Service” -> “WCF-Service” nur beim Targeting auf “.Net Core”. Daher habe ich eine grundlegende Konsolen-App mit demselben Namen wie meine Web-App erstellt.

Konsolen-Apps ermöglichen das Hinzufügen von “Dienstreferenzen” . Nach dem Hinzufügen erstellt VS2015 alle Dienstverweise im Ordner “Dienstverweise” .

Verschieben Sie HttpBindings EndPoint eine HttpBindings und verwenden Sie einen EndPoint Parameter HttpBindings und EndPoint akzeptiert.

In meinem Fall verbinde ich mich folgendermaßen mit dem Echosign- Dienst, der den Client initialisiert:

 using (EchoSignDocumentService16PortTypeClient service = new EchoSignDocumentService16PortTypeClient(new BasicHttpBinding(BasicHttpSecurityMode.Transport), new EndpointAddress(adddress))) { ... } 

Ich benötige SOAP für meine älteren Clients. Daher habe ich eine separate SOAP-Bibliothek erstellt, die mit meinen älteren Clients kompatibel ist. Dazu wird das .NET-Framework verwendet, das in einer separaten Umgebung gehostet wird. (SOAP.mywebsite.com). Dann auf http://www.mywebsite.com (erstellt mit asp.net Core, habe ich eine Restschnittstelle. Die SOAP-Schicht ruft die Restschnittstelle auf. Die Bibliothek, um die Restschnittstelle aufzurufen, wird mit Swashbuckle generiert.)

Um dieses Problem zu umgehen, habe ich in .Net 4.5 ein Nuget-Paket erstellt, das eine Verbindung zu nativen SOAP-Clients herstellt, die in .NET Core nicht unterstützt werden. Als Nächstes habe ich eine .NET-coreanwendung erstellt, die auf das .NET-Framework abzielt. Dadurch konnte ich das Nuget-Paket ohne Fehler verwenden.