Laden...

WCF und Datenbank Verbindung

Erstellt von Sythus vor 13 Jahren Letzter Beitrag vor 13 Jahren 1.518 Views
S
Sythus Themenstarter:in
166 Beiträge seit 2009
vor 13 Jahren
WCF und Datenbank Verbindung

Hallo zusammen,

ich habe einen WCF Service erstellt und würde nun gerne für meine Clientanwendung einen Datenbank Zugriff zur Verfügung stellen.

Momentan nutze ich SQLite auf dem Server.

Ich frage mich nun in welcher Art und Weise man den Zugriff zur Verfügung stellt?

Schicken die Clients eine SQL Abfrage an den Server, der pakt die Ergebnisse in ein Dictionary Array und sendet das Ergebnis zurück?

Oder gibt es auch eine Möglichkeit den direkten Zugriff zu realisieren?
Quasi den Reader weitergeben, oder die Connection?

Bin für jede Tips dankbar,

schönen Gruß

Sythus

1.457 Beiträge seit 2004
vor 13 Jahren

Hallo Sythus,

Ich persönlich würde die Abfragen in deinem Service erledigen und nur die Ergebnisse übertagen. Alles andere halte ich für nicht sinnvoll.

S
902 Beiträge seit 2007
vor 13 Jahren

Hallo,

im Sinne der Schichtenarchitektur sollte der Client weder Connectioobjekte noch den Reader bekommen.

Er sollte eine Anfrage an deinen Service schicken, welcher die DB abfrage macht, und das Ergebnis an den Client schickt (DataSet, eigene Objekte...).

mfg
serial

C
2.121 Beiträge seit 2010
vor 13 Jahren

Das mit der Übertragung von Connection oder Reader würde sowieso nicht funktionieren, da man ein Objekt nicht so hin und her geben kann.

J
1.114 Beiträge seit 2007
vor 13 Jahren

Ich geh ganz von der Idee weg, dass der Client überhaupt mit Datenbankobjekten in Berührung kommt, egal welcher Art (DataSet, Array). In meinen WCF Services biete ich nur die Methoden an, die für die Client wichtig sind. Soll z.B. eine Liste von neuen Mitarbeitern her, die seit einem Stichdatum eingestellt wurden, so würdest du, wenn ich dich recht verstehe, eine Methode anbieten, in der der Client den passenden SQL Select dazu formuliert, an den WCF schickt, und eine Array oder ähnliches zurückerhält.

Das halte ich persönlich für nicht gut. Stattdessen würde ich dem WCF Service Contract eine Methode List<Personal> RezentesPersonal (DateTime stichdatum) offrieren.

Das Ganze hat natürlich erstmal den Nachteil, dass diese Methode im Server erstellt werden muss, und den Client bekannt gemacht werden muss. Aber sicherheitstechnich hast du so viel bessere Möglichkeiten, deine Abfragen vor Unfug zu schützen. Zu den Personaldaten gehören beispielsweise auch sein Gehalt, und das sollte aber wohl nur in den seltensten Fällen, und nur unter der entsprechenden Berechtigung, zum Client gelangen. Kann der Client sein Select aber selbst formulieren, wird eine Überprüfung darauf sehr schwierig bis unmöglich.

Datenbankobjekte lassen sich darüberhinaus auch nur bestenfalls Spaltenweise schützen durch entsprechende Logins und Roles, jedoch nicht Datensatzweise. Besteht z.B. eine Anforderung, dass Personaldaten von der Führungsebene in keinem Fall ermittelt werden können, stehst du auch so vor dem Problem, dass sowas auf Datenbankebene allein nur sehr schwer zu realisieren wäre.

Deshalb mein Tipp: immer nur aussagekräftige Methodennamen nutzen können, die dem Client sein Ergebnis direkt liefert. Clients sollten von der DB Architektur niemals in Berührung kommen müssen.

S
Sythus Themenstarter:in
166 Beiträge seit 2009
vor 13 Jahren

Vielen dank für die ganzen Antworten.

Was mich persönlich etwas daran stört, wenn die Daten beim Server erst gesammelt und dann nochmal weitergeschickt werden ist die Doppelte Arbeit.

Client schickt Anfrage
Server sammelt Datensätze in einer Schleife
Server schickt Daten an Client
Client nimmt die Daten und verarbeitet diese wieder in einer Schleife

Hatte eben gehofft das es ressourcensparender geht.

Aber gut. Die Idee mit der Connection oder den Reader habe ich nun auch aufgegeben.
Die Idee von jelly finde ich auch gut. Allerdings will bzw. muss ich für die Clients eine Art Suche schreiben, damit diese in der Datenbank suchen können.

Das stell ich mir mit einer vordefinierten Funktion etwas schwieriger vor, da die Suchen entsprechend Komplex sein können.

Gruß
Sythus

1.457 Beiträge seit 2004
vor 13 Jahren

Wieso in einer Schleife? Das verstehe ich jetzt nicht.

Du übergibst entsprechende Parameter deinem Dienst und dieser verarbeitet diese und gibt das Resultat zurück. Ich weiß ehrlich gesagt jetzt nicht wo das Problem ist.