Microsoft Trainer e Software Architect
Sviluppatore professionista dal 2001 con VB6, SQL 2000 e Access creando applicazioni gestionali di varia natura. Passando rapidamente a .NET, windows e web, ho poi espanso le mie esperienze su Compact Framework, SQL Server Mobile ed infine BizTalk Server.
Negli ultimi anni mi sono focalizzato sempre più sullo sviluppo distribuito ed enterprise conseguendo nel contempo le seguenti certificazioni:
Microsoft Certified Trainer (MCT)Microsoft MCPD .NET 3.5 Enterprise Applications DeveloperMicrosoft MCTS .NET 3.5 WCF Applications DevelopmentMicrosoft MCTS .NET 3.5 ASP.NET Applications DevelopmentMicrosoft MCTS .NET 3.5 ADO.NET Applications DevelopmentMicrosoft MCTS .NET 3.5 Windows Applications DevelopmentMicrosoft MCTS .NET 2.0 Distributed Applications DevelopmentMicrosoft MCP .NET
Ciao a tutti
Forse vi sarà capitato di usare i WCF Data Services, ex ADO.NET Data Services…. se non vi è capitato, nessun problema forse è meglio così
E’ una tecnologia che mi lascia perplesso. WCFDS è un servizio WCF per ilDaaS (data as a service), dovrebbe funzionare un po’ come un bridge tra EntityFramework e chi vuole accedere ai dati.
Molto utile per lo sviluppo RAD dove hai tutta la logica fuori dal DaaS, perchè quando vuoi fare qualcosa di più complesso come creare almeno un TransactionScript (pattern di logica di business procedurale), già ti trovi a doverti preoccupare di cablare nomi di metodi e tipi a mano nel client e nel server….
In parole povere, WCFDS si sostituisce al DB, puoi accedere ai dati, modificarli, e scrivere dei metodi che sono paragonabili alle SP del DB…….
Facciamo degli esempi:
Creo un progetto WEB con dentro un EF4 con 1 sola tabella di nome Persons
Creo un WCFDS collegato a persons:
public class WcfDataService1 : DataService<TestDBEntities> { public static void InitializeService(DataServiceConfiguration config) { config.SetEntitySetAccessRule("*", EntitySetRights.AllRead); config.SetServiceOperationAccessRule("GetPersonsByBusinesssRule", ServiceOperationRights.AllRead); config.DataServiceBehavior.MaxProtocolVersion = DataServiceProtocolVersion.V2; }
[WebGet] public IQueryable<Person> GetPersonsByBusinesssRule() { return CurrentDataSource.Persons; } }
Già non mi piace il fatto ke devo scrivere a mano i nomi dei metodi e dei tipi per abilitarli…. e il Decorator?!??!
Di fatto il servizio espone i dati (è un daas) e un medoto di business in ottica simil transactionscript.
Vado nel client, aggiungo il riferimento al servizio, e VS mi genera le classi proxy… ma niente configurazione, quindi:
var WCFDS = new ServiceReference1.TestDBEntities(new Uri("http://localhost:45516/WcfDataService1.svc")); //si devo cablare o gestirmi la configurazione dell'URI a mano.....
var tableresult = WCFDS.Persons.ToList(); //qui posso scrivere la mia logica di business sui dati var businessresult = WCFDS.Execute<ServiceReference1.Person>(new Uri("GetPersonsByBusinesssRule", UriKind.Relative)).ToList(); //si non si genera nemmeno il nome del metodo o la sua response nel proxy //e ancora si: devo anche dirgli che il path è relativo altrimenti si perde.....
detto questo, non vi tedio ulteriormente sulle tante opzioni di configurazione tutte cablate nel codice che WCFDS gestisce con la possibilità di specificare autorizzazioni di default (come la ReadAll che ho messo in alto), o specifici metodi da decorare per gestire autorizzazioni più pecifiche….
Unico PRO degno di questo nome, è la possibilità di scrivere un filtro riga-per-riga in cui andare a nascondere porzioni di dati sulla base dell’utente
In sintesi: WCFDS è un bridge per l’accesso ai dati. se volete remotizzare EF allora si può usare così com’è, altrimenti, ogni idea di implementazione di logiche nel servizio, si scontrerà con un framework particolarmente immaturo e “cablato”
Si accettano critiche qualora avessi tralasciato aspetti paricolarmente positivi di WCFDS
Anto
No sembra abbastanza completo, hai tralasciato qualcosa ma il senso è quello: poi concordo sulle conclusioni.
Del resto oData è un meccanismo di accesso ai dati non una tecnologia per fare business layer..
Ciao a tutti tempo fa avevo parlato dei Data Services di WCF dotnetlombardia.org/.../tonyexpo