2008-09-22 3 views
7

Sollte ich ein stark typisiertes Dataset von einem Webservice aus anzeigen und direkt in einem Client binden? Oder gibt es für asmx-Webdienste sinnvollere Möglichkeiten? Ich mache CRUD-Operationen (Erstellen, Lesen, Aktualisieren, Löschen).Sollte ich einen stark typisierten Datensatz von einem Webservice zurückgeben?

Ich finde mit Datensätzen arbeiten frustrierend und schwierig zu sein, mit zu arbeiten, wenn zum Beispiel, wenn in es beispielsweise in eine Tabelle einzufügen. Es scheint nicht logisch zu sein, einen ganzen Datensatz hin und her zu senden, wenn nur ein Datensatz eingefügt wird oder wenn nur ein Datensatz aus einer bestimmten Tabelle innerhalb des Datensatzes abgerufen wird.

Gibt es einen besseren Weg?

Soll ich vielleicht auf Objekte und die Verwendung Objekte über den Webservice Umwandlung sein? Es ist vielleicht genauso mühsam, überall Umbauten zu machen, um Objekte herumzureißen?

Antwort

4

Es hängt von Ihren Interoperabilitätsanforderungen ab. Obwohl es durchaus möglich ist, die DataSet-XMLs aus praktisch jeder Umgebung zu verarbeiten, kann es sehr unhandlich werden. Wenn Sie nicht interoperieren, würde ich definitiv die typisierte Dataset-Route empfehlen, weil sie wahnsinnig einfach von C# zu verwenden ist und "einfach funktioniert".

2

Beachten Sie, dass die Dataset spezifisch von .NET ist. Wenn Sie Ihre API interoperabel machen möchten, sollten Sie sich an elementare Datentypen und Konstrukte halten (ansonsten ist die Situation für die Nicht-.NET-Entwickler wahrscheinlich umständlich).

Dann Web Services sind nicht für große Objekte entworfen um in einer einzigen Reise zu übergeben. Wenn Ihr Dataset mehr als ein paar hundert KB enthält, werden Sie wahrscheinlich mit clientseitigen oder serverseitigen HTTP-Timeouts enden (unter Berücksichtigung der Standardeinstellungen).

Für CRUD-Operationen würde ich einfach vorschlagen, jede Operation direkt über die WS zu exponieren.

0

Ich stimme mit Joannes ... Stick mit Objekten und spezifischen Methoden für die Arten von Operationen, die Sie machen möchten.

+0

Wenn Sie nur zustimmen Posting, warum hast du nicht nur Upmod stattdessen? –

+0

Gute Frage, Gehirn funktionierte nicht. Entschuldigung und Stimme für Joannes - fertig und fertig. –

3

würde ich sagen, entscheiden sich für Objekte, können DataSet ist ein bisschen chaotisch. Objekte können viel sauberer betrachtet werden und natürlich debuggen.

Seien Sie jedoch vorsichtig, wenn Sie mit abstrakten Typen arbeiten, da es ein wenig mühsam sein kann, zu serialisieren, wenn Sie Sammlungen auf Basis einer abstrakten Klasse/Schnittstelle haben. Ich hatte jedoch in der Vergangenheit Probleme damit, ich habe found a solution.

2

Ich hatte großen Erfolg mit DataSets (der Server verwendet und gibt ein stark typisiertes Dataset zurück, während der Client es als Standard-Dataset verwendet). Wie Tomer warnt, habe ich keine Interoperabilitätsprobleme.

In Bezug auf die Aktualisierung, senden Sie den gesamten Datensatz ist eine schlechte Idee. Es gibt eine Methode für die DataSet- und die DataTable-Objekte, die GetChanges() aufgerufen werden, die alle Änderungen zurückgeben, seit AcceptChanges() aufgerufen wurde. Dies sollte Ihnen helfen, den Netzwerkverkehr gering zu halten.