WCF to Java Webservices Interop scheint überraschend problematisch. Irgendwelche guten Ressourcen?

13

Bei einem kürzlich durchgeführten Projekt wurde unser .Net-basiertes Entwicklerteam mit der Integration einer ganzen Reihe von Java-basierten Webdiensten auf der ganzen Welt beauftragt, und wir hatten wirklich eine überraschend große Menge von Problemen (na ja, wir sind sicherlich nicht mehr überrascht) weil das von WCF generierte XML von den Java-Diensten nicht akzeptiert wird.

Es scheint auch, dass es nicht wirklich so viele gute Informationen zu diesem Thema gibt. Wir haben einige gute Tipps von Yaron Naves exzellentem WCF-Blog http://webservices20.blogspot.com und auch vom MSDN WCF-Forum http: //social.msdn.microsoft.com/Forums/en-US/wcf/threads .

Gibt es hier jemanden, der wirklich das Gefühl hat, dass er das geschafft hat und die entscheidende Ressource zu diesem Thema kennt? Würde mich für Tipps zu Büchern, Blogs oder Websites interessieren.

Bearbeiten:
Ich bin hin und her gerissen, wenn ich die für diesen Thread akzeptierte Antwort
festlege , da jede der beiden besten Antworten einen gewissen Wert hat: 1. Wir werden wahrscheinlich mehr HTTP-Webanfragen implementieren, anstatt WCF zu bekämpfen.
2. Der WCF Express Interop Bindings 1.0 war aber auch ein sehr vernünftiger Tipp.

Bjørn
quelle
Ich weiß nichts über WCF, aber produziert es SOAP-basierte XML-Pakete oder nur einen Teil von XML, der von einem RESTful-Dienst verwendet werden könnte?
Martijn Verburg
1
Gibt XML, JSON oder RDF + XML zurück.
Alan B
Können Sie Beispiele dafür nennen, was zwischen dem wcf-Client und dem Java-Webservice schief gelaufen ist? Meinen Sie Webservice = Seife oder etwas anderes?
k3b
1
Es liegt außerhalb des Rahmens dieser Frage, auf die Einzelheiten einzugehen. Sie können mein Profil zum Stapelüberlauf überprüfen, um Beispiele zu erhalten. Hier möchte ich nur hören, ob jemand das gleiche Problem mit WCF (oder .Net im Allgemeinen) -Clients hat, die mit Webservices interagieren, die auf anderen Plattformen basieren.
Bjørn

Antworten:

15

Ah ja ... SOAP, der gepriesene Heilige Gral des Rechnens. Eine Verkehrssprache, die Interop zwischen Systemen auf der ganzen Welt verspricht.

Und dann lernen Sie die Unterschiede zwischen SOAP-Implementierungen auf Java und PHP und .NET kennen. Oder sogar zwischen dem WebSphere SOAP-Service und dem Apache SOAP-Client. Es spielt keine Rolle, mit verschiedenen WS-I-Kompatibilitätsstandards umzugehen. Sagen Sie mir jetzt bitte, warum Sie einen Kompatibilitätsstandard für ein Protokoll benötigen , das auf Kompatibilität ausgelegt ist. Sprechen Sie über Ironie (und ich meine echte Ironie, nicht die Marke Alanis Morrissette für Ironie ).

Die einzige Möglichkeit, Probleme bei der Kommunikation zwischen zwei SOAP-Endpunkten zu vermeiden, besteht darin, dass sich beide auf derselben Plattform befinden und die Plattform in den meisten Fällen über ein effizienteres Remote-Betriebsprotokoll verfügt.

Was ich hier sage, ist, dass SOAP größtenteils nutzlos ist. Jetzt Kleinbuchstaben Seife, ich benutze das jeden Tag und ich bin dankbar, dass die meisten Menschen das gleiche tun.

Davon abgesehen, wenn Sie darauf bestehen, Ihren Kopf gegen eine Mauer zu schlagen. Hier ist ein guter Anfang Microsoft verfügt über eine Reihe von Bindungen, um die Interoperabilität mit den meisten wichtigen Java-Servern zu ermöglichen. Der spaßige Teil ist natürlich herauszufinden, welche mit welchen von Ihnen integrierten Diensten zusammenarbeiten.

Michael Brown
quelle
5
SOAP ist der neue CORBA :)
gbjbaanb
Irgendwie scheine ich es in Client-Integrationsprojekten ziemlich häufig erfolgreich zu machen. YMMV anscheinend.
David J. Liszewski
9

Meiner Meinung nach ist Ihre Beobachtung ziemlich genau. Die übergeordneten Implementierungen der XML-basierten Kommunikation sind normalerweise nicht mit verschiedenen Plattformen kompatibel, auch wenn dies der Fall ist beide „SOAP“ genannt. Geringe Unterschiede in der Implementierung, wahrscheinlich beide im Rahmen des implementierten Standards, führen zu Problemen im realen Einsatz.

Meine Empfehlung für Dienstleister: Verwenden Sie eine einfache Implementierung anstelle einer sehr komplexen und theoretisch besseren Implementierung. Schließen Sie beispielsweise keine extrem komplexen Authentifizierungsschemata ein, wenn Sie diese nicht benötigen.

Meine Empfehlung für Servicekonsumenten (Sie, nehme ich an): Wenn Sie mit einer Implementierung auf hoher Ebene auf einer anderen Plattform als Ihrer kommunizieren, reduzieren Sie sich auf eine Implementierung auf niedrigerer Ebene. Es wird plötzlich ganz einfach, wenn Sie einfach herausfinden, was das eigentliche zu sendende XML ist, und dann die üblichen guten Codierungspraktiken anwenden, um dies zu erreichen, anstatt darauf zu bestehen, die Implementierung auf hoher Ebene Ihrer eigenen Plattform zu verwenden.

Ich hoffe, es war nicht zu abstrakt. Kurz gesagt , wenn Sie sich auf der .NET-Plattform befinden, die eine Verbindung zu einer Java-Plattform herstellt, möchten Sie möglicherweise einfach die Header und XML in einer HTTP-Webanforderung zusammenstellen und auf diese Weise senden.

Niels Brinch
quelle
4

Sie werden die gleichen Probleme haben, PHP-Webdienste zu verbrauchen.

Unsere einzige Antwort darauf war, den Protokolltyp auf REST anstatt auf SOAP zu ändern. Wir haben noch nie das SOAP-Zeug zum Zusammenspiel bekommen, so sehr für Simple!

gbjbaanb
quelle
In den meisten Fällen haben wir absolut keine Möglichkeit, die vorhandenen Webdienste in irgendeiner Weise zu ändern, wir müssen uns mit SOAP mit ihnen verbinden, egal was passiert. Also ich fürchte keine Antwort für dich gelöst. ;)
Bjørn
1
> "Keine Möglichkeit, die vorhandenen Webdienste in irgendeiner Weise zu ändern" In diesem Fall; Machen Sie sich bereit, Sie sind auf eine harte Fahrt vorbereitet. Ich habe mich gerade von zwei Wochen Headbangen erholt und versucht, einen WcF / Soap-Webservice von Java / Android aus aufzurufen. Meine Rettung war, dass ich - anders als Sie - Zugriff auf den Service hatte und dafür gesorgt habe, dass ein REST / JSON-Endpunkt verfügbar gemacht wurde. Weiter so. Falls Sie können.
BaBu
@ Bjørn na ja, sorry, dir das dann zu sagen aber um den Fachbegriff zu verwenden, bist du beschissen. Ich denke, die einzige Antwort ist, die Verwendung von WCF zu beenden und einen anderen SOAP-Client zu verwenden.
gbjbaanb
Unser Team lacht und weint über Ihre Antworten. :) Danke meine Herren.
Bjørn