[Daily Issue] Web Service, AXIS Interop e namespace

Web Service e namespace NON sono i miei argomenti preferiti, anzi di solito tendo a limitarmi al mondo .NET appunto per evitare problemi. Purtroppo in giro c'è di tutto, e recentemente ho avuto parecchi problemi ad interfacciarmi con un Web Service su base AXIS con due diverse definizioni di Namespace...

Il problema che avevo era appunto che due schema definivano due Namespace differenti, il problema è che uno di questi conteneva la definizione di un Complextype sul namespace B, ed il secondo conteneva la definizione dei metodi sul namespace A, che però restituivano un oggetto di tipo Complextype definito sull'altro namespace.

Il problema del WSDL generato è, credo, una scorretta direttiva di Import che fa generare a .NET una classe proxy "scorretta": il metodo proxy ragiona con un ResponseNamespace A, mentre l'oggetto proxy che definisce il ComplexType veniva creato con un XmlTypeAttribute che si riferiva al namespace B. Risultato: quando cerca di Deserializzare l'oggetto, i dati ci sono, ma i namespace non coincidono quindi non li trova, e il complex type (in questo caso un Array di oggetti con proprietà stringa) restituisce correttamente gli oggetti, ma con tutte le proprietà valorizzate a null.

In attesa di capire con il creatore del Web Services come/se mettere a posto il problema, visto l'urgenza della cosa, ho utilizzato un Workaround: utilizzando l'utilissimo tool Wsdl.exe, ho fatto creare a lui la classe proxy (per chi non lo sapesse, questo oggettino che risiede nella directory del Framework prende in ingresso un file WSDL e genera la classe proxy: è quello che viene chiamato da Visual Studio quando si fa Add Web Refefrence....), l'ho importata nel progetto come classe (quindi senza creare la Web Reference) e ho modificato l'XmlTypeattribute dell'oggetto che rispecchia il ComplexType da B ad A, in modo che fosse concorde al ResponseNameSpace del metodo. In questo modo il serializzatore non impazzisce e mi restituisce gli oggetti correttamente riempiti. Poco ortodosso, ma efficace :D

Print | posted on giovedì 8 novembre 2007 13.35

Comments on this post

# re: [Daily Issue] Web Service, AXIS Interop e namespace

Requesting Gravatar...
ottima spiegazione. E' una settimana che cerchiamo di risolvere questo problema, alla fine la soluzione l'avevamo già trovata, ma non eravamo arrivati ad una descrizione chiara come la tua.
Alla fine siete riusciti a risolvere il problema a monte, ovverosia modificando il file .wsdl in maniera opportuna?
Enrico

Left by enrico on lug 18, 2008 12.46

Your comment:

 (will show your gravatar)
 
Please add 1 and 2 and type the answer here: