WCF in .NET CF 3.5
Ho appena seguito una sessione sull'argomento: su circa 500 persone nella sala nessuno ha avuto mai la necessità di fare comunicazioni peer to peer; la maggioranza ha il problema di tutti: recuperare informazioni dal campo per inviarle al server centrale.
WCF in .NET CF 3.5 cerca di risolvere entrambe le problematiche con l'obiettivo di semplificare la scrittura del codice per eseguire queste operazioni, consentire comunicazioni server-to-device e non solo device-server. Il tutto con 250KB come obiettivo: nella Beta1 di Orcas, rilasciata in questi giorni la dimensione è c.a. 450KB.
Il subset delle funzionalità attuali (non dovrebbero essere ne tagliate ne aggiunte nuove funzionalità fino alla versione finale) sono
Transport
HTTPTransport e MailTransport.
Il primo viene usato tramite il classico BasicHttpBinding, mentre il secondo sfrutta un transport non esistente nella versione completa di WCF su .NET 3.0 attuale.
Il trasporto via mail viene utilizzato per inviare il messaggio SOAP via Exchange Server 2007 e consente lo store and forward sul device e su Exchange. In pratica si sfrutta il canale della posta elettronica (che con WM 6.0 e Exchange 2007 ha subito notevoli miglioramenti sulla sincronizzazione) che offre nativamente la memorizzazione del messaggio per il tempo in cui il device non è connesso.
Per comunicazioni peer to peer, tramite la tecnologia Push il server Exchange informa altri device (basta avere indirizzi email diversi per ogni device) dei messaggi a loro destinati.
WS-*
Per quanto riguarda le varie specifiche WS-*, questa prima versione di WCF "mobile" supporta un subset di WS-Security e WS-Addressing.
E' possibile aggiungere moduli custom
Encoding
Disponibile solo Text o encoding custom
Generale
Non sono supportati Service Model e Contract Model, quindi il tutto è message-oriented.
Tutto quello che non ho citato non è supportato.
Sviluppo
Lo sviluppo di codice è abbastanza manuale e non può appoggiarsi alla classica configurazione tramite app.config (visto che non esiste su .NET CF).
L'utilizzo è comunque semplice via Http:
- Si crea il messaggio su una classe definita
- Tramite XmlSerializerWrapper si serializza il tutto
- Si crea il channel con BasicHttpBinding e l'interfaccia IChannelFactory
- Si apre il channel
- Si spedisce il messaggio e si aspetta la risposta
- Si deserializza la risposta
- Si chiude channel e factory rilasciando poi il WCF Runtime Mobile
Per quanto riguarda il trasporto via email si utilizza WindowsMobileMailBinding.
In questa Beta c'è un bug conosciuto su WindowsMobileMailBinding ed è necessario aspettare un paio di settimane quando verrà rilasciata la fix....non provate quindi a inviare un messaggio verso Exchange: non è colpa della configurazione, del codice, di Exchange; semplicemente non funziona ! :-)
SvcUtil
Non è previsto insieme ad Orcas, quindi per adesso si fa tutto a mano. Dopo il rilascio di Orcas ci sarà un aggiornamento sotto forma di Power Toy che appunto conterrà SvcUtil: questo signore esite e l'ho visto funzionare ma per adesso non si può creare il proxy e occorre lavorare più manualmente.