Oggi Andrea ha creato una applicazione WCF per CompactFramework, per collegare una applicazione per PPC ad un servizio WCF esposto su un webservice.
Tutto sembra funzionare correttamente, tranne che per l'invio di alcuni dati da parte del PPC al server.
Abbiamo scoperto che ogni volta che il palmare incontra un valore nullable, il valore non viene serializzato di default e quindi non viene riportato sul server.
La classe proxy del servizio generata per l'applicazione PPC,contiene infatti una proprietà aggiuntiva per ogni proprietà Nullable.
La proprietà (di tipo boleano) si chiama esattamente con lo stesso nome della proprietà base con in più il suffisso "Specified".
Ogni volta che intendo inviare al servizio un valore nullabile è necessario impostare il valore di tale proprietà a TRUE.
Altrimenti il client non serializzerà il valore corrispondente all'interno del messaggio e sul server otterrò sempre un valore nullo.
Dopo ogni assegnazione è quindi necessario inserire una if e se abbiamo effettivamente valorizzato la proprietà dobbiamo inserire un true sulla rispettiva proprietà Specified.
[code language="C#"]
if(myentity.myproperty != null)
myentity.mypropertySpeficied=true;
else
myentity.mypropertySpecified=false;
[/code]
Il problema probabilmente è un errore di serializzazione della classe proxy, infatti si potrebbe far inserire questa if all'interno del metodo set di ogni proprietà.