2013-06-13 3 views
5

Im Grunde habe ich eine neue Desktop-Anwendung, an der mein Team und ich arbeiten, die auf Windows 7-Desktops in unserer Fertigungshalle läuft. Dieses Programm wird bei seiner Einführung ziemlich intensiv genutzt und muss mit unserer Fertigungsdatenbank interagieren. Ich würde schätzen, dass es (irgendwann) ungefähr 100 - 200 Maschinen geben wird, die diese Anwendung gleichzeitig ausführen.Wie soll ich mit einer Datenbank von einer Desktopanwendung aus interagieren, ohne sie für die ganze Welt zu öffnen?

Wir haben Glück, wir haben alles von Grund auf neu zu machen, also definieren wir die Datenbank, alle Webdienste, das Programmdesign und jede Interaktion zwischen den oben genannten.

Wie es gerade ist, haben unsere Legacy-Anwendungen nur direkten Zugriff auf eine Datenbank, die icky ist. Das wollen wir mit der neuen Anwendung nicht machen.

Also meine Frage ist, wie mache ich das? Vage, ich weiß, aber im Grunde habe ich hier eine Menge zur Verfügung, und ich bin mir nicht ganz sicher, was die richtige Richtung ist.

Mein erster Gedanke, basierend auf dem, was ich andere wahrgenommen habe, besteht darin, die Datenbank mithilfe von Webservices zu schließen. d. h. alle Datenbankinteraktionen vom Boden MÜSSEN über die Webdienste erfolgen, wodurch eine Sicherheitsschicht geschaffen wird, indem ein großer Teil der Datenbanklogik hinter verschlossenen Türen ausgeführt wird. Webservice-Aufrufe werden dann über Active Directory für einzelne Benutzer gesichert.

Wie ich jedoch festgestellt habe, hat das einige Implikationen ... Wir müssen die Daten abstrahieren, bevor sie die Anwendung erreichen. Es besteht immer noch das Potenzial für bösartigen Missbrauch, indem Webservice-Anrufe wiederholt verwendet werden, um Daten zu ruinieren oder zu spammen. Wir haben uns Entity Framework angeschaut und mögen wirklich, was es bietet, aber wenn ich das am besten beurteilen kann, wird es in diesem Moment nicht verfügbar sein, wenn wir uns auf Anwendungsebene befinden.

Es scheint nur so, als könnte ich nicht zu dem Schluss kommen, was "richtig" ist. Also, was ist richtig?

Antwort

3

WebServices klingt wie ein richtiger Ansatz. Durch die Implementierung einer SOA-orientierten Schicht auf der Webservices-Ebene haben Sie eine große Kontrolle darüber, was mit den Daten auf dem Datenbankserver geschieht.

Ich teile nicht Ihre Zweifel über wiederholte Anrufe, die Schaden anrichten - zuerst können Sie ein Überwachungsprotokoll jedes einzelnen Anrufs haben, damit die Entdeckung möglicher Mißbräuche offensichtlich ist. Sie können jedoch auch eine rollenbasierte Sicherheit implementieren, sodass Web-Service-Methoden Benutzern in Rollen zur Verfügung gestellt werden, was bedeutet, dass nicht jeder in der Lage ist, eine beliebige Methode aufzurufen.

Sie können sogar Ihre Webservices mit Formularauthentifizierung sichern, so dass die Authentifizierung für jede Datenquelle, nicht nur für das aktive Verzeichnis, erfolgt.

Und zuletzt, die Anwendung selbst könnte als eine ClickOnce-Anwendung veröffentlicht werden, so dass es heruntergeladen und von der Webseite ausgeführt wird und es automatisch aktualisiert sich gerade, wie Sie neue Versionen veröffentlichen.

Wenn Sie einige technische Unterstützung benötigen, habe ich vor Jahren gebloggt auf:

http://netpl.blogspot.com/2008/02/clickonce-webservice-and-shared-forms.html

+0

Vielen Dank für Ihre Antwort! Ich hatte gehofft, dass - das wäre der richtige Ansatz. – MGSoto

1

Mein Vorschlag, da Sie der grünen Wiese sind, ist eine API-Wrapper-Ansatz mit Servicestack zu verwenden.

Check out: http://www.servicestack.net/ServiceStack.Northwind/

tun, dass Sie servicestack Authentifizierung, abstrahieren Ihre db Schicht verwenden können (weil Sie zu einem anderen DB-Anbieter bewegen konnte, seine Lage ändern, bieten Warteschlangen für Arbeitselemente etc ...) und vielleicht verschieben Sie Ihre gesamte Infrastruktur mit der Zeit in eine interne Intranet-App.

Plus Servicestack ist unglaublich schnell, interoperabel mit fast jedem Protokoll, das Sie durchlaufen, und sorgt dafür, dass es durch MONO läuft, so dass Sie nicht mit einem MS-Backend stecken bleiben, das sehr teuer sein könnte.

Meine zwei Cent. :)

+0

@HighCore Haben Sie jemals ServiceStack verwendet? Hier sind einige Unterschiede im Vergleich zu WCF (http://www.infoq.com/articles/interview-servicestack). – mythz

+0

@HighCore Wenn Sie noch nie etwas anderes versucht haben, werden Sie nie die Grenzen Ihrer Frameworks kennen oder was andere besser machen. Nichts, was Sie gesagt haben, sagt, dass Sie offen dafür sind, zu lernen, was Best Practices, schnellere Performance, bessere Produktivität oder mehr Resilienz fördert. Auch kein großes Internet- oder SOA/Cloud-Service-Unternehmen verwendet SOAP oder WCF. WCF ist auch veraltet, Microsoft nutzt es nicht einmal selbst oder fördert es nicht selbst für neue Dienste und seine neueste fx-Web-API, es sieht gar nicht wie WCF aus. Am Ende bist du einer der wenigen, die es fördern, und das ist wahrscheinlich, weil du nur begrenzte Erfahrung draußen hast. – mythz

+0

@mythz Sie könnten Recht haben. Vielleicht ist es Zeit, meine Meinung ein wenig zu ändern. –

0

Zunächst ist diese Frage nicht passend für StackOverflow, Sie könnten sehr schnell nahe Stimmen bekommen.

Zweitens, möchten Sie vielleicht einen Blick auf WCF RIA Services dafür werfen.

Damit können Sie grundlegende CRUD-Operationen für alle Ihre Entitäten und solche Sachen erstellen. Ich habe das nie selbst benutzt, nein ich bin nicht sicher, was die möglichen Probleme sein könnten.

Ansonsten tun Genau das, was wir haben:

erstellen Generika (<T>) Schnittstellen und Dienste und Verträge und alles. Auf diese Weise können Sie Ihre CRUD-Funktionalität in Ihren Services, DAOs, ViewModels usw. an jeden Entitätstyp anpassen.

Verwandte Themen