L'interoperabilità dei servizi Web da WCF a Java sembra sorprendentemente problematica. Qualche buona risorsa?


13

Con un recente progetto, il nostro team di sviluppo basato su .Net è stato incaricato di integrarsi con tutta una serie di servizi Web basati su Java in tutto il mondo e abbiamo davvero avuto una sorprendente quantità di problemi (beh, non siamo certamente più sorpresi) perché l'XML generato da WCF non è accettato dai servizi Java.

Sembra anche che non ci siano davvero molte buone informazioni da trovare sull'argomento, abbiamo ottenuto alcuni buoni consigli dall'eccellente blog WCF di Yaron Nave, http://webservices20.blogspot.com , e anche sul forum MSDN WCF http: //social.msdn.microsoft.com/Forums/en-US/wcf/threads .

C'è qualcuno qui che sente davvero di averlo capito e conosce la risorsa definitiva sull'argomento? Sarebbe interessato a suggerimenti su libri, blog o siti Web.

Modifica:
sono lacerato nell'impostare la risposta accettata su questo thread, perché ognuna delle due risposte migliori ha un certo valore:
1. Probabilmente finiremo per fare più implementazioni di richiesta Web HTTP invece di combattere WCF.
2. Ma il WCF Express Interop Bindings 1.0 è stato anche un suggerimento molto sensato.


Non so nulla di WCF, ma produce pacchetti XML basati su SOAP o solo un pezzo di XML che potrebbe essere consumato da un servizio RESTful?
Martijn Verburg,

1
Restituisce XML, JSON o RDF + XML.
Alan B,

puoi fornire esempi di cosa è andato storto tra client wcf e java webservice? intendi webservice = sapone o qualcosa di diverso?
k3b,

1
È al di fuori dell'ambito di questa domanda entrare nei dettagli, è possibile controllare il mio profilo su overflow dello stack per esempi. Qui, voglio solo sapere se qualcun altro ha lo stesso problema con i client WCF (o .Net in generale) che interagiscono con i servizi web basati su altre piattaforme.
Bjørn,

Risposte:


15

Ah sì ... SAPONE, il presunto santo graal dell'informatica. Una lingua franca che prometteva l'interoperabilità tra i sistemi di tutto il mondo.

E poi si entra nelle differenze tra le implementazioni SOAP su Java, PHP e .NET. O anche tra il servizio SOAP WebSphere e il client SOAP Apache. Non importa di occuparsi di diversi standard di compatibilità WS-I. Ora per favore dimmi perché hai bisogno di uno standard di compatibilità per un protocollo che è stato creato per compatibilità , parla di ironia (e intendo vera ironia, non del marchio di ironia Alanis Morrissette ).

L'unica volta che non si verificano problemi nel comunicare due endpoint SOAP è quando si trovano entrambi sulla stessa piattaforma e nella maggior parte dei casi la piattaforma avrà un protocollo di funzionamento remoto più efficiente.

Quello che sto dicendo qui è che per la maggior parte, SOAP è inutile. Ora sapone minuscolo, lo uso tutti i giorni e sono grato che molte persone facciano lo stesso.

Detto questo, se insisti a sbattere la testa contro un muro di mattoni. Ecco un buon posto per partenza Microsoft ha una serie di collegamenti per consentire l'interoperabilità con la maggior parte dei principali server Java. La parte divertente ovviamente è scoprire quali funzionano con i servizi che stai integrando.


5
SOAP è il nuovo CORBA :)
gbjbaanb,

In qualche modo sembra che lo stia facendo con successo piuttosto frequentemente nei progetti di integrazione client. Apparentemente YMMV.
David J. Liszewski,

9

Secondo me, la tua osservazione è abbastanza accurata. Le implementazioni di alto livello della comunicazione basata su XML non sono generalmente compatibili con piattaforme diverse, anche se lo sono entrambe sono chiamate "SOAP". Lievi differenze nell'implementazione, probabilmente entrambe nell'ambito dello standard implementato, creano problemi nell'uso della vita reale.

La mia raccomandazione per i fornitori di servizi: utilizzare un'implementazione semplice anziché un'implementazione molto complessa e teoricamente migliore. Ad esempio, non includere schemi di autenticazione estremamente complessi se non sono necessari.

La mia raccomandazione per i consumatori di servizi (tu, presumo): quando comunichi a un'implementazione di alto livello su una piattaforma diversa dalla tua, passa a un'implementazione di livello inferiore. Improvvisamente diventa abbastanza semplice se si capisce semplicemente qual è l'XML effettivo da inviare e quindi si utilizzano le normali buone pratiche di codifica per farlo, in alternativa a insistere sull'uso dell'implementazione di alto livello della propria piattaforma.

Spero non sia stato troppo astratto. In breve , quando ti trovi su una piattaforma .NET che si connette a una piattaforma Java, potresti voler semplicemente assemblare le intestazioni e l'xml in un HttpWebRequest e inviarlo in quel modo.


4

Avrai gli stessi problemi anche nel consumo dei servizi web PHP.

La nostra unica risposta a ciò era cambiare il tipo di protocollo in REST piuttosto che in SOAP. Non abbiamo mai avuto l'interoperabilità delle cose SOAP, tanto per Simple!


Nella maggior parte dei casi, non abbiamo assolutamente alcuna opzione per modificare i servizi Web esistenti in alcun modo, dovremo collegarci a loro con SOAP, qualunque cosa accada. Quindi temo che nessuna risposta sia stata risolta per te. ;)
Bjørn

1
> "nessuna opzione per modificare i servizi Web esistenti in alcun modo" In tal caso; preparati, sei pronto per un giro difficile. Mi sono appena ripreso da 2 settimane di colpi alla testa, cercando di chiamare un servizio web wcf / soap da java / android. La mia salvezza è stata che io, a differenza di te, avevo accesso al servizio e l'ho fatto esporre un endpoint REST / JSON. Ben fatto. Se puoi.
BaBu,

@ Bjørn vabbè, mi dispiace dirti allora ma per usare il termine tecnico, sei fregato. Immagino che l'unica risposta sia smettere di usare WCF e usare un client SOAP diverso.
gbjbaanb,

Il nostro team sta ridendo e piangendo dalle tue risposte. :) Grazie signori.
Bjørn,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.