2012-07-25 19 views
8

In einer Mehrbenutzerumgebung: Wie stellen Sie sicher, dass alle Clients ihre Änderungen sehen? Was ist der beste Weg, dies zu tun?Technik (en) in einer C# -Multibenutzeranwendung, in der alle Clients ihre Daten aus einer zentralen Datenbank aktuell haben

In der Vergangenheit habe ich eine C# -Anwendung erstellt und auf 2 PCs installiert. Es wurde mit einem zentralen SQL Express-Server verbunden (die Client-Anwendung arbeitete mit Entity Framework Code First als ORM). Wenn client1 einen Datensatz zur Datenbank hinzugefügt hat, war dies nicht direkt sichtbar für client2. Nur wenn client2 alle Daten erneut abgerufen hat (hard refresh), war die Änderung sichtbar.

Jetzt suche ich nach einer Lösung, wie diese 'Synchronisierung' (?) Durchgeführt werden kann oder sollte. Ich mag es, Entity Framework Code zu arbeiten. Zuerst wäre es schön, wenn eine Lösung dies halten könnte. Auch die Anwendung ist noch in einem sehr frühen Stadium. Ich dachte, ich hätte eine zentrale Datenbank und mehrere Clients, aber ich bin mir nicht sicher, ob das eine gute Lösung ist. Wenn Ihre Vorschläge/Lösungen eine zentrale Server-Anwendung erfordern, mit der sich die Clients verbinden (und wo die Server-Anwendung die Datenbank bearbeitet), wäre dies kein Problem.

Wenn möglich, wäre eine grundlegende Beispiellösung oder ein einfacher Code, der zeigt, wie man immer mit den neuesten Daten arbeitet, sehr hilfreich!

ähnliche Fragen:

Vielen Dank im Voraus

Antwort

2

Es Ihre Umgebung abhängt und die Daten, die Sie verwalten und die Architektur, die Sie wollen.

Wenn es OK/akzeptabel ist, dass Kunden Kopien der Daten haben, mit denen sie arbeiten können, müssen sie mit den Daten arbeiten, wenn sie nicht mit dem zentralen Server verbunden sind. Dann können Sie das Sync Framework verwenden.

Sie haben Ihren zentralen SQL Server wie gewohnt und verwenden das Sync Framework zum Synchronisieren mit Clients.

Sie würden einen „Provider“ schreiben, die entscheiden würde, wie sich Änderungen an den gleichen Daten von verschiedenen Clients aus lösen usw.

Sie müssten SQL Express setzen (oder möglicherweise LocalDB (neuer Name für SQLCE)) auf die Client-Rechner.

Dann machen Sie Ihr Entity Framework Model/Code für den Zugriff auf die lokale Datenbank statt auf eine zentrale Datenbank.

http://blogs.msdn.com/b/sync/archive/2008/06/24/sample-sql-express-client-synchronization-using-sync-services-for-ado-net.aspx

Sonst ist es bis auf die Gestaltung und einige „Ebenen“ zur Durchführung und nach einer Distributed Internet/Datenbank Architektur/SOA.

Eine schöne freie Ressource:

http://msdn.microsoft.com/en-us/library/ff650706.aspx

http://mtechsoa2011.blogspot.co.uk/2011/04/soa-vs-distributed-internet_27.html

Einige nützliche Bücher:

http://www.amazon.co.uk/Service-Oriented-Architecture-Concepts-Technology-Computing/dp/0131858580/ref=sr_1_1?s=books&ie=UTF8&qid=1343295432&sr=1-1

+0

danke für Ihren Vorschlag. Persönlich fühlt sich das nicht wie eine gute Art zu arbeiten an. Die Client-Anwendung lädt alle Daten (wegen eines Rasters und um das Raster zu durchsuchen), das bedeutet, dass eine lokale Datenbank eine vollständige Kopie eines SQL (Express) Servers hat. Dort sehe ich bereits Einschränkungen (z. B. max Datenbank-Site von localDB vs SQL Server vs SQL Express). Irgendwelche anderen Vorschläge? – juFo

1

Andere Lösung ist es, eine "Schnittstelle" für Ihre Datenbank und jeder Put erstellen Die Datenoperation von einem Client kann andere Clients benachrichtigen. Sie können eine solche Schnittstelle von WCF mit ihren Callbacks implementieren. Ich habe keinen einfachen Code für die gesamte Architekturlösung ... Wenn Sie konkretere Fragen zum Erstellen einer n-Tier-Anwendung mit WCF stellen, werde ich versuchen, Ihnen zu helfen.