13

Jul

WCF Data Services - Questo immaturo

Ciao a tutti

 

Forse vi sarà capitato di usare i WCF Data Services, ex ADO.NET Data Services…. se non vi è capitato, nessun problema Smile 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
{
    public static void InitializeService(DataServiceConfiguration config)
    {
        config.SetEntitySetAccessRule("*", EntitySetRights.AllRead);
        config.SetServiceOperationAccessRule("GetPersonsByBusinesssRule", ServiceOperationRights.AllRead);
        config.DataServiceBehavior.MaxProtocolVersion = DataServiceProtocolVersion.V2;
    }

    [WebGet]
    public IQueryable 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(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 Smile

Anto

by Antonio Esposito on 7/13/2011