Silverlight 3 e i .NET RIA Services – parte 1

I .NET RIA Services (attualmente in Preview rilasciata dopo il MIX09) sono molto interessanti per chi scrive applicazioni e vuole esporre entità tramite servizi e poi consumarle da Silverlight 3. Pensiamo ad esempio ad una piccola applicazione, costruiamo lo strato di accesso ai dati con Entity Framework, vogliamo poi costruire uno strato di servizi per esporre gli stessi dati ad un’applicazione silverlight 3.

Requisiti

Per seguire il mio esempio dovete avere installato:

Attenzione: se sulla vostra macchina sviluppate anche con Silverlight 2, usate una macchina virtuale per Silverlight 3 beta, perchè dopo l’installazione dei tool la macchina sarà configurata per questa versione di Silverlight, la 3 appunto e non vi sarà supporto per creare progetti Silverlight 2.

Esempio

Creiamo un nuovo progetto Silverlight 3,  potete anche usare il nuovo template Silverlight Navigation …

image

Nella maschera successiva, lasciate impostato il flag “Link to ASP.NET server project”. Questo creerà un legame tra il nostro servizio e l’applicazione client (Silverlight) generando ad ogni compilazione delle classi per Silverlight ed il relativo modello che permetteranno l’interazione con la corrispondente parte lato server.

image 

Creiamo uno strato di accesso ai dati

Ora al nostro progetto aggiungiamo un semplice strato di accesso ai dati fatto con Entity Framework, usando northwind e prendendo la tabella Customers, che creerà la corrispettiva classe, immagino fino a qui sia più o meno tutto noto e le immagini seguenti siano esplicative:

image

image

Nel disegno futuro potrete usare qualunque tecnologia per lo strato di accesso ai dati usata insieme ai .NET RIA Services: LINQ to SQL, vari ORM, semplici oggetti .NET etc, etc.

Creiamo ora il mid-Tier usando i RIA Service

Ora, sempre sul progetto web, che contiene ora il nostro file.edmx, possiamo aggiungere un DomainDataService. Questo nuovo template per VS 2008:

  • crea un servizio REST-based, rendendo possibili operazioni CRUD sulla nostra sorgente dati.
  • ci permette di esporre i metadati relativi alle nostre entità. Questi possono essere molto utili in caso volessi aggiungere delle regole di validazione sul modello stesso dei dati (vedete dopo).

Quindi, Add New Item, selezionare Domain Service Class, chiamiamo il nostro servizio ad esempio CustomersService, ad esempio

image

Ora nella schermata seguente abbiamo la possibilità di selezionare le Entità e se abilitare la modifica su queste, questo creerà dei metodi di Update, Insert e Delete. Inoltre selezionate il flag per creare la classe dei metadati, che ci servirà dopo per la validazione.

image

l’opzione Enable Client Access è importante: questa crea il legame tra il mid-tier, il nostro progetto web che espone dati, ed il progetto Silverlight 3. Ogni volta che compilo l’applicazioni vengono create delle classi proxy, che si mappano sul modello.

Le classi lato server

Sul server ora vengono create due classi, la prima customerModel, contiene i metoti per ottenere/inserire/modificare e cancellare i nostri customers, le entità del nostro modello:

image

la classe CustomersModel.metadata.cs contiene i metadati relativi

Le classi lato client: Silverlight

Se compiliamo il progetto, vengono prodotte in automatico delle classi proxy, per vederle in Visual Studio, possiamo usare il bottone per visualizzare tutti i file:

image

Scriviamo il codice dell’applicazione Silverlight 3

Ora, per renderci conto di come usare i RIA Services (un primo modo per la verità), inseriamo una semplice DataGrid nel progetto Silverlight e poi scriviamo il codice seguente nel file di code-behind:

image

image

Se lancio l’applicazione ho i dati visualizzati nelle griglia:

image

il metodo LoadCustomers è il corrispondente metodo associato al metodo GetCustomers definito a livello di servizio. I RIA Services usano questa convenzione nella nomenclatura, che comunque può essere personalizzata e/o modificata usando l’attributo [Query] sul metodo del Servizio.

Nella prossima parte ci occuperemo di:

  • filtraggio, ordinamento, paginazione
  • nuovi controlli RIA
  • validazione
  • operazioni CRUD