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:
- Visual Studio 2008 SP1 o Visual Web Developer Express 2008
- Silverlight 3 Beta Tools for Visual Studio
- NET RIA Services (March preview)
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 …
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.
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:
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
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.
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:
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:
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:
Se lancio l’applicazione ho i dati visualizzati nelle griglia:
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
Comments
Anonymous
April 17, 2009
PingBack from http://microsoft-sharepoint.simplynetdev.com/silverlight-3-e-i-net-ria-services-%e2%80%93-parte-1/Anonymous
April 17, 2009
Ottimo post, complimenti. Silverlight sta facendo passi grandi, sta diventando un ottimo strumento, molto interessante.Anonymous
April 20, 2009
Nel primo post di questa serie avete visto un piccolo esempio di come costruire uno strato di mid-tierAnonymous
April 27, 2009
Questo post conclude il piccolo esempio con cui è possibile sperimentare l’uso di Silverlight 3 insiemeAnonymous
September 27, 2009
Ciao Pietro, grazie per il tuo ottimo post. Solo una domanda? Il mio oggetto CustomersModel non ha il metodo LoadCustomers! Non dovrebbe essere generato automaticamente?Anonymous
September 27, 2009
Ciao luca, l'esempio si riferiva alla CTP di giugno, in quella di luglio, il modello di programmazione è leggeremente cambiato e il codide che devei scrivere è diverso. productsGrid.ItemsSource = _catalog.Products; var query = from p in _catalog.GetProductsQuery() where p.ProductSubcategoryID == 1 select p; _catalog.Load(query); Dovrei in effetti aggiornare il post :-) ma se scarichi la guida che vine con la CTP di Luglio trovi gi esempi di codice da cui partireAnonymous
November 02, 2009
Ciao Pietro, grazie per l'immediatezza nella tua risposta. Ho un quesito che non riesco a risolvere, sicuramente puoi aiutarmi: E' possibile far sì che i dati caricati nel Datagrid attraverso RIA Service vengano automaticamente aggiornati quando la base dati viene modificata, in modo da tenere la UI sempre ed automaticamente allineata con la base dati lato server. GrazieAnonymous
November 02, 2009
Un meccanismo di notifica al contrario, dal servizio alla UI, mi sa che è difficile da mettere in piedi. Richiederebbe implementare una call-back dal server verso il client o qualche meccanismo di polling del client vero il server.Anonymous
November 04, 2009
HO UN PROBLEMA: ho installato Studio 2010 beta e di conseguenza Silverlight 3 . Ho creato un'applicazione web usando asp. Mando in esecuzione e il server ASP.net Development Server mida il seguente errore:Error: Unhandled Error in Silverlight Application Code: 2104 Category: InitializeError Message: Could not download the Silverlight application. Check web server settings come devo fare per fare il debug in questo malefico Silverlight? Grazie a tuttiAnonymous
November 04, 2009
Stai usado IIS o il developer server di VS ? Guarda qua se risolve: http://forums.silverlight.net/forums/t/111126.aspxAnonymous
November 12, 2009
Pietro ti disturbo per un altro problema: Io ho un RIA Service che espone una View del mio DB (ovviamente in sola lettura). Nel mio DomainService ho quindi: public IQueryable<ChiusiAgr> GetSerieCartelliniEvasiArg(){ var q = this.Context.ChiusiAgr; return q; } Lato silverlight effetuo il caricamento dei dati così: ctx.Load<EmessiAgr>(ctx.GetSerieCartelliniEmessiArgQuery(), MergeOption.OverwriteCurrentValues, dsEmessi_LoadedData, null) private void dsEvasi_LoadedData(LoadOperation<ChiusiAgr> lo) { IEnumerable<ChiusiAgr> chiusi = lo.Entities; } Non mi riesco a spiegare perchè mentre la variabile q lato server sia correttamente valorizzata, lato client la variabile chiusi è vuota!! Hai qualche idea sul cosa possa causare questo comportamento. Grazie.Anonymous
November 29, 2009
Ciao, sto cercando di utilizzare il tuo esempio per imparare ad utilizzare i RIA service con Silverlight 3. Sto utilizzando il database di esempio AdventureWorksLT2008R2 ma dopo avere aggiunto correttamente l'ADO.NET Data Model e passo alla costruzione del mid-Tier con l'inserimento del Domain Service Class nell'opzione "Available DataContexts/ObjectContexts" non posso selezionare nulla se non "empty domain service class". Hai un'idea sulla causa del mio problema? Grazie milleAnonymous
November 29, 2009
Ciao è da poco stata rilasciata la versione beta dei RIA Service ? Cosa sti usando ? Probabilmente comunque devi prima compliare il progetto, fai un rebuild all, POI aggiungi il template dei Domain Service, di solito è lì il problema.Anonymous
November 29, 2009
ciao, avevi ragione bastava fare il rebuild della solution. Comunque stavo usando l'ultima versione dei .NET RIA Services (novembre 2009). Grazie milleAnonymous
March 02, 2010
Grazie mille per l'esempio, è perfetto. A questo punto avrei bisogno di cambiare la connection string a runtime (cioè spingendo un bottone nel file mainpage.xaml). Ho cercato e cercato ma le soluzioni che ho trovato in giro (per esempio questa http://forums.silverlight.net/forums/p/121357/276323.aspx) non mi funzionano. Hai qualche esempio? Grazie mille.Anonymous
March 05, 2010
Ciao Pietro, potresti postare una demo di questo tutorial?? Grazie in anticipo!! CiaooAnonymous
December 16, 2010
Informazioni eccellente, continuate così grande. <a href="http://www.eurograndcasino.biz"></a>Anonymous
September 15, 2011
Ciao Pietro, so che deve essere banale, ma non riesco nel Main Page a istanziare CUstomerModel : CustomerModel contex = new CustomerModel(); Continia a non riconoscermi "CustomerModel". Cosa canno?? :) grazie