WCF su Compact Framework: xxxSpecified vs IsRequired

Oggi si discuteva riguardo alla questione ben descritta in questo articolo (con relative possibili gestioni).

In breve, quando si crea un riferimento ad un servizio WCF da un progetto mobile, tramite NetCFSvcUtil, se ci sono delle classi usate come DataContract con proprietà di tipo value type definite come DataMember, per ognuna di esse verrà generata anche una proprietà booleana avente nome xxxSpecified (dove xxx è il nome della proprietà), con valore di default false.
Quando si inviano i dati dal palmare al server tramite un’istanza di questa classe, per far si che i valori delle proprietà di tipo value type arrivino a destinazione occorre impostare i valori delle relative proprietà xxxSpecified a true, altrimenti la proprietà dell’oggetto che viene deserializzato nel server avrà il valore di default.
La presenza di queste proprietà xxxSpecified permette di gestire il versioning delle entità, in modo tale da non generare degli errori alla ricezione del messaggio da parte del server se il client non invia tutte le proprietà attualmente gestite dal servizio.

Se non si ha l’esigenza di gestire il versioning (es. perchè si realizzano sia il server ed il client, e si fa in modo che siano sempre allineati), si può gestire la situazione in un altro modo, utilizzando la proprietà IsRequired dell’attributo DataMember (un esempio del suo funzionamento è riportato qui).
Impostandola al valore true, quindi marcando le proprietà della classe usata come DataContract con DataMember(IsRequired = true), al momento della generazione dei proxy NetCFSvcUtil non genera più le proprietà xxxSpecified, con il vantaggio di evitare di dimenticarsi di valorizzarle a true prima di trasmettere i dati al server.

Queste due possibili gestioni alternative possono far nascere dubbi sugli effetti che si possono avere nella gestione dei dati, in particolare per le properità dichiarate come nullable type.
In realtà entrambi gli approcci non influiscono sui nullable, e ne permettono tranquillamente la gestione anche tramite un binding limitato come può essere il basicHttpBinding, quello disponibile da Compact Framework.

In conclusione, utilizzando le proprietà xxxSpecified bisogna ricordarsi di impostare a true le proprietà da trasmettere (una soluzione può essere utilizzando un costruttore definito in una partial class), viene “sporcata” la definizione della classe con queste proprietà (in certi contesti potrebbe anche dar fastidio), ma si ha il vantaggio di poter gestire il versioning; usando IsRequired, invece, è sufficiente impostarne il valore associato agli attributi DataMember.

Se avete altre considerazioni da aggiungere, i commenti sono aperti ;)

posted @ Wednesday, October 7, 2009 7:06 PM

Print

Comments on this entry:

# aid first picture

Left by http://dhanvarsha.in/xnqKSfH0s/ at 10/25/2010 9:19 PM
Gravatar
| <a href="http://xn--gunds-zua.dk/tfz2pEvKm/" >picture dutch wind mill</a>

# Manufacturer of medical-x-ray machine

Left by kobe at 5/3/2011 3:52 AM
Gravatar
Recently, the Chinese government input the country medical equipment little by little and the development of digital direction of hospital’s X-ray machine is the main dynamic. In addition, lower X-ray machine will be able to maintain stability in the next few years. But there is a huge growth in the higher market such as
C-arm X-ray Unitt and DR. There are three times of growth in foreign DR quantity from 2007 to 2011. Multinational enterprises have occupied the leading role in higher medical x-ray machine market, for example Gastrointestinal machine.

# re: WCF su Compact Framework: xxxSpecified vs IsRequired

Left by attdd at 6/15/2011 2:04 PM
Gravatar
efsdt fers fds Some time before, I did need to buy a house for my firm but I did not earn enough cash and could not buy anything. Thank God my father proposed to try to get the kleidverkauf
Abend- und Ballkleider
Blumenkinder Kleider
Brautjungfernkleider
Brautkleider
brautzubehoumlre
wedding dresses
Short Wedding Dresses
Simple Wedding Dresses
Wedding Dresses with Sleeves
Wedding Gowns Dresses
Bridesmaid Dresses
shelters camping

# re: WCF su Compact Framework: xxxSpecified vs IsRequired

Left by attdd at 6/15/2011 2:06 PM
Gravatar

# re: WCF su Compact Framework: xxxSpecified vs IsRequired

Left by forklift at 6/20/2011 10:27 AM
Gravatar
Comments have been closed on this topic.