2009-07-27 6 views
5

Quindi, da quello che ho visto sui servizi, gli oggetti personalizzati sembrano essere la strada da percorrere quando il servizio viene scritto per restituire i dati. Se sto scrivendo un servizio che sarà usato per 1) compilare un database, o 2) fornire informazioni per un sito web, c'è sempre un uso per restituire un set di dati/datatable in contrapposizione a un elenco di oggetti personalizzati con tutto questo informazione?servizio web/servizio wcf, è sempre meglio restituire un set di dati?

grazie

risposta

6

Penso che il problema più grande con l'invio di DataSet oltre il filo, a patto di "propri" entrambe le estremità, è la pura "peso" di un DataSet porta - con la sua capacità relazionali ecc lo fa molto di più di dati di trasporto. Una semplice raccolta di oggetti dovrebbe essere sostanzialmente più leggera.

Se non si "possiede" entrambe le estremità o si possono avere altri client che utilizzano il proprio servizio, il DataSet è un incubo di interoperabilità.

Se non si cura di uno di questi problemi, e si sente che una collezione di oggetti è troppo "lavoro" (ad esempio, se si sta solo andando a tradurre di nuovo a un DataSet sull'altra estremità) allora questa è la tua chiamata.

C'è un buon articolo sopra here.

+0

Possiedo solo un'estremità e l'utente del servizio utilizza .NET 1.1 –

+0

Soprattutto nel caso in cui non si possieda una delle estremità, si rimuove completamente la possibilità di eseguire la versione del contratto. Stai incidendo il tuo servizio nella pietra. –

1

Gli oggetti personalizzati semplificano i tuoi clienti. DataSet/DataTables ti rendono più facile.

Penso che dovresti basare la tua decisione su chi vuoi rendere più facile.

0

Nonostante la popolarità di ORM, restituisco i set di dati. Restituire oggetti personalizzati significa lavorare molto sulla parte che duplica le funzionalità già presenti nella classe del set di dati. I set di dati svolgono un ottimo lavoro nel rappresentare i dati basati su tabella in memoria.

4

L'unica volta che dovessi tornare DataTable/DataSet sopra WCF è dove ho qualcosa in cui è semplicemente impossibile conoscere lo schema in anticipo, o semplicemente non è alcun beneficio. Il 99,99% delle volte lavorerò con classi DTO regolari, dato che offre una buona combinazione di prestazioni, semplicità (debug) e interoperabilità.

Ho lavorato con WCF dal 3.0 CTP ... Ho usato DataTable tramite WCF solo un paio di volte ... Mi sono sentito un po 'sporco, ma per i casi in questione non c'era semplicemente ritorno sull'investimento per farlo nel modo più duro.

Basta notare che sarà molto difficile per un client non- .NET per consumarli.

2

Domande di questo tipo sono difficili da testare, ma in generale no non si desidera restituire un set di dati da un servizio web. Insead tenta di restituire un oggetto aziendale. Qualcosa che ha senso per un uomo d'affari come un concetto come una classe di ordine. La ragione di ciò è che in generale non si desidera accoppiare il client del servizio Web con i dettagli dell'implementazione dell'applicazione che fornisce il servizio. Il cliente si preoccupa degli ordini e non di come quegli ordini siano poi strutturati nel database. Ciò creerebbe un accoppiamento stretto che è opposto allo spirito di un servizio web. In secondo luogo, se il client che usa il webservice non è un client .net, finirebbe con un XML piuttosto schifoso da creare/analizzare per leggere/scrivere il set di dati che non sarebbe un tipo di dati sulla loro piattaforma.

1

non vorrei usare insiemi di dati oltre i servizi web per i seguenti motivi (che possono o non possono essere rilevanti nel tuo caso):

  • dataset sono la tecnologia MS, cosa succede se si desidera chiamare il servizio web da un client java?
  • Non hai il controllo sulle modifiche che il cliente fa. Stai solo recuperando un elenco di modifiche che vengono mantenute nel database.
  • dataset sono un sacco di informazioni che non può essere richiesto, che porta a problemi di prestazioni.
0

Sono totalmente sconvolto dal numero di persone che non si rendono conto di quanto sia una decisione atroce avere un servizio Web che restituisca un DataSet.

Un dataset è un tipo personalizzato di .NET. Il punto centrale di un servizio web è che può essere chiamato da qualsiasi linguaggio su qualsiasi piattaforma.

In parole povere, se un servizio Web restituisce un DataSet allora non è un servizio web!

+0

è XML. Il codice di chiamata in .NET può ricostituirlo in un set di dati. Da qualche altra piattaforma possono semplicemente trattarlo come XML e trovare le informazioni. Non è come restituire un blob binario. –

+0

Sì, non è un blob binario, ma dai, progettando un metodo che ha una stringa come tipo di ritorno che contiene un carico di XML non è un buon progetto. (Indipendentemente dal fatto che tu stia parlando di un servizio web o di qualsiasi altro tipo di servizio/metodo). – gusgorman