L'interopérabilité des services Web WCF vers Java semble étonnamment problématique. De bonnes ressources?

13

Avec un projet récent, notre équipe de développement basée sur .Net a été chargée d'intégrer une multitude de services Web basés sur Java dans le monde entier, et nous avons vraiment eu un nombre surprenant (enfin, nous ne sommes certainement plus surpris) d'un grand nombre de problèmes car le XML généré par WCF n'est pas accepté par les services java.

Il semble également qu'il n'y ait pas vraiment beaucoup de bonnes informations à trouver sur le sujet, nous avons obtenu de bons conseils de l'excellent blog WCF de Yaron Nave, http://webservices20.blogspot.com , et également sur le forum MSDN WCF http: //social.msdn.microsoft.com/Forums/en-US/wcf/threads .

Y a-t-il quelqu'un ici qui a vraiment l'impression d'avoir compris cela et qui connaît la ressource définitive sur le sujet? Serait intéressé par des conseils sur des livres, des blogs ou des sites Web.

Edit:
Je suis déchiré sur la définition de la réponse acceptée sur ce fil, car chacune des deux meilleures réponses a une certaine valeur:
1. Nous finirons probablement par faire plus d'implémentations de Webrequest HTTP au lieu de combattre WCF.
2. Mais le WCF Express Interop Bindings 1.0 était également une astuce très judicieuse.

Bjørn
la source
Je ne sais rien de WCF, mais produit-il des paquets XML basés sur SOAP ou juste un morceau de XML qui pourrait être consommé par un service RESTful?
Martijn Verburg
1
Renvoie XML, JSON ou RDF + XML.
Alan B
pouvez-vous donner des exemples de ce qui n'a pas fonctionné entre le client wcf et le service Web Java? voulez-vous dire webservice = soap ou quelque chose de différent?
k3b
1
Il est hors de la portée de cette question d'entrer dans les détails, vous pouvez consulter mon profil sur le débordement de pile pour des exemples. Ici, je veux juste savoir si quelqu'un d'autre a le même problème avec les clients WCF (ou .Net en général) interagissant avec les services Web basés sur d'autres plates-formes.
Bjørn

Réponses:

15

Ah oui ... SOAP, le Saint Graal vanté de l'informatique. Une lingua franca qui promettait l'interopérabilité entre les systèmes du monde entier.

Et puis vous entrez dans les différences entre les implémentations SOAP sur Java et PHP et .NET. Ou même entre le service WebSphere SOAP et le client Apache SOAP. Ne vous occupez jamais des différentes normes de compatibilité WS-I. Maintenant, dites-moi pourquoi vous avez besoin d'une norme de compatibilité pour un protocole qui a été conçu pour la compatibilité , parlez d'ironie (et je veux dire de la vraie ironie, pas de la marque d'ironie Alanis Morrissette ).

La seule fois où vous ne rencontrerez pas de problèmes lors de la communication de deux points de terminaison SOAP, c'est lorsqu'ils sont tous les deux sur la même plate-forme et dans la plupart des cas, la plate-forme aura un protocole d'opération à distance plus efficace.

Ce que je dis ici, c'est que pour la plupart, le savon est inutile. Maintenant, du savon en minuscules, je l'utilise tous les jours et je suis reconnaissant à la plupart des gens de faire de même.

Cela étant dit, si vous insistez pour vous battre la tête contre un mur de briques. Voici un bon point de départ. Microsoft dispose d'un ensemble de liaisons pour permettre l'interopérabilité avec la plupart des principaux serveurs Java. La partie amusante est bien sûr de savoir lesquels fonctionnent avec quels services vous intégrez.

Michael Brown
la source
5
SOAP est le nouveau CORBA :)
gbjbaanb
D'une certaine manière, je semble réussir avec succès assez fréquemment dans les projets d'intégration des clients. YMMV apparemment.
David J.Liszewski
9

À mon avis, votre observation est assez exacte. Les implémentations de haut niveau de la communication basée sur XML ne sont généralement pas compatibles avec différentes plates-formes, même si elles sont toutes deux appelées "SOAP". Des différences subtiles dans la mise en œuvre, probablement dans le cadre de la norme implémentée, créent des problèmes dans l'utilisation réelle.

Ma recommandation pour les prestataires de services: utiliser une implémentation simple plutôt qu'une implémentation très complexe et théoriquement meilleure. Par exemple, n'incluez aucun schéma d'authentification extrêmement complexe si vous n'en avez pas besoin.

Ma recommandation pour les consommateurs de services (vous, je présume): lorsque vous communiquez avec une implémentation de haut niveau sur une plate-forme différente de la vôtre, dégradez-la en une implémentation de niveau inférieur. Cela devient soudainement assez simple si vous découvrez simplement quel est le XML réel à envoyer, puis utilisez les bonnes pratiques de codage normales pour y parvenir, au lieu d'insister sur l'utilisation de l'implémentation de haut niveau de votre propre plate-forme.

J'espère que ce n'était pas trop abstrait. En bref , lorsque vous êtes sur la plate-forme .NET et que vous vous connectez à une plate-forme Java, vous souhaiterez peut-être simplement assembler les en-têtes et le xml dans un HttpWebRequest et l'envoyer de cette façon.

Niels Brinch
la source
4

Vous aurez également les mêmes problèmes en consommant les services Web PHP.

Notre seule réponse à cela a été de changer le type de protocole en REST plutôt qu'en SOAP. Nous n'avons jamais réussi à faire interagir le SOAP, tant pis pour Simple!

gbjbaanb
la source
Dans la plupart des cas, nous n'avons absolument aucune option pour modifier les services Web existants de quelque manière que ce soit, nous allons devoir nous y connecter avec SOAP, quoi qu'il arrive. Je crains donc qu'aucune réponse ne soit résolue pour vous. ;)
Bjørn
1
> "aucune option pour modifier les services Web existants de quelque manière que ce soit" Dans ce cas; Préparez-vous, vous allez faire un tour difficile. Je viens de récupérer de 2 semaines de coups de tête, en essayant d'appeler un service Web wcf / soap depuis java / android. Mon salut était que, contrairement à vous, j'ai eu accès au service et l'ai fait exposer un point de terminaison REST / JSON. Marche à suivre. Si tu peux.
BaBu
@ Bjørn eh bien, désolé de vous le dire alors, mais pour utiliser le terme technique, vous êtes foutu. Je suppose que la seule réponse est d'arrêter d'utiliser WCF et d'utiliser un autre client SOAP.
gbjbaanb
Notre équipe rit et pleure de vos réponses. :) Merci messieurs.
Bjørn