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