21 Stimmen

Bewährte Praxis: Direkter SQL-Zugriff vs. Webdienst

In Bezug auf eine Anwendung, die sowohl eine Web- als auch eine Desktop-Client-Version hat:

  1. Was ist die beste Vorgehensweise für den Desktop-Client, der Zugriff auf einen SQL-Server benötigt?
  2. Welche Vorteile hat die Verbindung zur Datenbank von der Anwendung aus gegenüber der Verwendung eines Webdienstes?
  3. Welche bietet mehr Sicherheit?
  4. Welche Art von Anwendungsbereich würde das eine gegenüber dem anderen erfordern (Unternehmensintranet vs. Webanwendung, etc.)
  5. Gibt es weitere Überlegungen, die bei der Wahl der Plattform angestellt werden müssen?

17voto

Darin Dimitrov Punkte 990883

Als allgemeine Faustregel gilt Folgendes:

  1. Schreiben Sie eine unabhängige Datenzugriffs-Assembly, die mit der Datenbank kommunizieren wird.
  2. Wenn Sie die Interoperabilität zwischen verschiedenen Plattformen/Clients anstreben, sollten Sie diese Baugruppe als SOAP-Webdienst bereitstellen.
  3. Wenn Sie auf Leistung Wert legen, verwenden Sie die Assembly direkt in Ihren Client-.NET-Anwendungen.

16voto

Wim ten Brink Punkte 25248

Was ist die beste Vorgehensweise für den Desktop-Client, der Zugriff auf einen SQL-Server benötigt?

Wenn Sie einen lokalen SQL-Server verwenden, greifen Sie direkt auf die Datenbank zu. Wenn der Kunde eine SQL-Datenbank auf einem anderen System verwenden muss, ist die Verwendung eines Webdienstes vorzuziehen, um einen zusätzlichen Schutz und den zusätzlichen Vorteil einer Geschäftsschicht zu erhalten, die in der Lage sein sollte, mehrere Benutzer zu bedienen.

Welche Vorteile hat die Verbindung zur Datenbank von der Anwendung aus gegenüber der Verwendung eines Webdienstes?

Die Verbindung über einen Webdienst wird immer etwas langsamer sein, und Änderungen an der Datenbank sind etwas schwieriger in das gesamte System zu integrieren. (Im Grunde würde das bedeuten, dass Sie eine neuere Version des Webdienstes erstellen müssen, während Sie den älteren Webdienst aus Gründen der Abwärtskompatibilität beibehalten).

Welche bietet mehr Sicherheit?

Die Nutzung von Webdiensten ist tendenziell sicherer, auch wenn die Sicherheit oft eher ein Menschen Problem als ein Softwareproblem. Aber mit dem Webdienst zwischen dem Benutzer und der Datenbank ist die Verbindung zur Datenbank sicherer, da der Benutzer nicht direkt auf sie zugreifen kann. (Mit Ausnahme der Funktionen, die Sie über den Webdienst bereitstellen.) Dieser Punkt ist irrelevant, wenn sich Client und Datenbank auf demselben System befinden, da der Benutzer dann vollen Zugriff erhält.

Welche Art von Anwendungsbereich würde das eine gegenüber dem anderen erfordern (Unternehmensintranet vs. Webanwendung, etc.)

Webdienste eignen sich besser für Client-Server-Anwendungen, bei denen die Benutzer keinen direkten Zugriff auf die Datenbank haben sollten. Ansonsten würde eine direkte Datenbankverbindung nur die Leistung verbessern. Wenn Sie einen Webdienst erstellen, beginnen Sie mit dem Schreiben einer generischen (Klassen-)Bibliothek, die die Funktionalität für den Webdienst bereitstellen wird. Erstellen Sie um diese (Geschäfts-)Bibliothek herum einen Webdienst, der die wichtigen Methoden nach außen hin offenlegt. Jede Website kann diese Bibliothek direkt aufrufen, ohne den Webdienst zu verwenden, obwohl Sie sich auch dafür entscheiden können, den Code der Website über den Webdienst auf die Daten zugreifen zu lassen. Selbst wenn Sie nur eine Desktop-Anwendung mit einer lokalen Datenbank erstellen, ist es eine gute Sache, eine Geschäftsbibliothek mit Logik für den Zugriff auf die Datenbank zu schreiben. Ihr Client kann diese Geschäftsbibliothek direkt oder über einen Webdienst aufrufen, je nach Bedarf.

Gibt es weitere Überlegungen, die bei der Wahl der Plattform angestellt werden müssen?

Hauptsächlich geht es um die Menge an Hardware, die Sie bereit sind, für die Einrichtung zu verwenden. Wenn Sie es sich leisten können, einen Datenbankserver, einen separaten Webdienst für die Dienste und einen dritten für Ihre Website einzurichten, mit einem Dutzend Client-Systemen oder so, dann können Sie sich für die mehrschichtige Version entscheiden, bei der sowohl der Client als auch die Website den Webdienst aufrufen, der wiederum die Datenbank aufruft. Wenn aber alles auf einem einzigen System laufen muss, dann sollten Sie sich auf die Anwendung und die Geschäftsschicht/Bibliothek beschränken.

Das Hinzufügen von Ebenen verringert jedoch die Leistung aus der Sicht eines einzelnen Benutzers. Die Arbeit mit mehreren Ebenen kann jedoch die Gesamtleistung verbessern, da die Ressourcen besser auf mehrere Benutzer verteilt werden.

7voto

Andomar Punkte 224164

Ich würde es einfach halten und die Anzahl der Schichten auf ein Minimum reduzieren. Ebenen kosten Leistung, führen zu Komplexität und erfordern, dass Änderungen an mehreren Stellen vorgenommen werden.

Wenn also die Netzwerkverbindung zwischen der Anwendung und Sql Server offen ist (typischerweise tcp port 1433), würde ich Sql Connectivity verwenden.

5voto

Marty Nelson Punkte 57

In diesem Zusammenhang kann der Client-Zugang zu Datenbanken ein großes Sicherheitsproblem darstellen. Es ist entweder erforderlich, den Benutzern Zugang zur Datenbank zu gewähren oder ein Dienstkonto einzurichten. Ein direkter Zugriff auf die Datenbank birgt Risiken. Beide Ansätze öffnen die Tür zur Ausnutzung von Desktop-DLLs, um eine Verbindung zur Datenbank außerhalb des Anwendungskontextes herzustellen (Ich habe mehrfach Fälle gesehen, in denen es eine gemeinsame Datenzugriffsklasse gibt, die von allen funktionalen Operationen verwendet wird. Und natürlich initialisiert diese Komponente alle Verbindungsinformationen. Durch den reflexionsbasierten Zugriff ist es einfach, an geschützte oder private Methoden zu gelangen, es sei denn, Sie setzen Sicherheitsprivilegien durch).

Webdienste stellen funktionale Operationen zur Verfügung, die keine SQL-basierten Operationen beinhalten. Dies ist nicht nur sicherer, sondern abstrahiert den Client von der Implementierung der Datenspeicherung.

Auch hier kommt es auf Ihren Kontext an. Im Bereich der Unternehmen/ISVs ist dies jedoch generell ein großes Tabu.

3voto

Mathias F Punkte 15112

Wenn Sie vom Desktop aus auf die DB zugreifen können, sollten Sie das tun.

Sie haben mehrere Arten von Kunden. Das bedeutet, dass Ihre Anwendung mehrere Schichten haben sollte. Es bedeutet nicht, dass Sie mehrere Ebenen benötigen.

Mehrere Ebenen können erforderlich sein, wenn Ihre Schichten Daten über Firewalls hinweg übertragen müssen oder wenn Sie verschiedene Technologien einsetzen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X