Roberto Brunetti

Developing in the cloud

.NET Programming

Archives

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:

  1. Si crea il messaggio su una classe definita
  2. Tramite XmlSerializerWrapper si serializza il tutto
  3. Si crea il channel con BasicHttpBinding e l'interfaccia IChannelFactory
  4. Si apre il channel
  5. Si spedisce il messaggio e si aspetta la risposta
  6. Si deserializza la risposta
  7. 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.

 

Posted: mag 02 2007, 01:26 by rob | with 2 comment(s) |
Filed under:

Comments

emanueldb said:

Ciao Rob.

Se non ho capito male, grazie al supporto di WCF nel .NET CF 3.5 si possono sviluppare servizi basati su "server WinCE" utilizzati da client Windows? Giusto?

Questo è molto utile in ambito industriale dove molti vorrebbero utilizzare HW basato su WinCE per contenere i costi.

Che ne pensi?

# luglio 31, 2007 9:19

rob said:

Ciao emanueldb,

a quanto ne so, con WCF in .NET CF 3.5 si può solamente sviluppare un client che utilizza BasicHttpBinding o il nuovo MailBinding per invocare servizi remoti.

Che io sappia non ci sono modifiche a HTTPD (il Web Server di Windows CE) e non sono previsti agganci da questo a WCF sul device.

Quindi, ad oggi e sempre alle info di cui sono in possesso, non si può fare un servizio WCF ospitato su Windows CE.

# agosto 1, 2007 10:22