WebService, Serializzazione, dati nullabili e interop 1.x e 2.0

[English version]

Finalmente con la versione 2.0 del Framework la serializzaione ci darà la possibilità di inserire nei nostri xml dati nulli secondo gli standard xml, xsi:nil.Tale possibilità ci viene offerta dai nullable types. L'xml è ad oggi considerato il re dei formati di interoperazione tra sistemi eterogenei per tecnologia. Un possibile scenario del prossimo futuro potrebbe essere quello di avere il sistema server che espone servizi web implementati con la 2.0 e client implementati con la 1.x.  Ovviamente la cosa è possibilissima. Ma cosa succede se il server espone un nullable type? Client-side interpreta il wsdl correttamente e genera quindi senza problemi la classe proxy.. ovviamente non disponendo di nullable types nativi i dati nullabili verranno sostituiti con tipi non nullabili (esempio bool invece di bool?). Anche a runtime tutto sembra andare bene ma quando ci troviamo davanti il primo dato nullo ecco che il serialializer della 1.x non riesce a interpretarlo generando errore.

So già che per questo molti scenderanno in piazza dicendo che l'xml generato dalla 2.0 non è compatibile con quello della 1.x... in realtà è solo che il Serializer della 1.x ha meno potenzialità di quello della 2.0 - mi sembra il minino - e per questo occorre avere qualche attenzione in più. 

Come risolvere? I NullableTypes di Luka sono un ottima soluzione alla cosa! I NullableTypes implementano IXmlSerializable, hanno quindi una serializazione Xml personalizzata che è conforme alla serializzazione dei nullable type nativi della 2.0! Fantastiko! :-D Dopo avere generato la classe proxy con VS2003 occorre personalizzarla e sostituire i value type nullabili con i tipi nullabili di Luka :-D

L'interoperabilità vale anche al contrario. Un server web che espone servizi implementati con la 1.x può usare i NullableTypes per esporre dati nullabili; una applicazione client 2.0 che vuole consumare tali servizi può con VS2005 interpretare senza problemi il wsdl per generare la classe proxy. I tipi nullabili  non vengono però convertiti correttamente ma vengono mappati come XmlElement. Sarà però possibile modificare tale classe sostituendo gli XmlElement con i Nullable<T> corrispondenti ai tipi che devono mappare e il gioco è fatto! :-D

Buona interop a tutti! :-D

posted @ venerdì 4 novembre 2005 12:12

Print

Comments on this entry:

# re: WebService, Serializzazione, dati nullabili e interop 1.x e 2.0

Left by M.rkino at 05/11/2005 11:30
Gravatar
Thank U very much Luka... Now I think it's better to translate the post in english too. This week end I work to do it. ;-p

# [sourceforge.net] .NET 2.0 Web Services interoperability!

Left by Pingback/TrackBack at 06/11/2005 17:30
Gravatar
NullableTypes can be used in .NET 1.x to interoperate with Web Services developed with .NET 2.0 that have C# 2.0 nullable types parameters or return types.
Comments have been closed on this topic.
«novembre»
domlunmarmergiovensab
272829303112
3456789
10111213141516
17181920212223
24252627282930
1234567