wir haben hier einen MFC-FatClient der mit direkt per SQL Daten aus einer SQL-Datenbank holt, Berechnungen ausführt und auf Benutzerbefehl Ergebnisse in die Datenbank schreibt. Es gibt eine graphische Ergebnisansicht sowie verschiedene Masken zur Datenpflege. Das Hauptproblem besteht bei mehreren gleichzeitigen Nutzern, da der letzte, der auf "Ergebnis übernehmen" drückt, gewinnt. Das heisst dass dieser Nutzer alle Ergebnisse überschreibt.
Ich bin nun auf der Suche nach einer besseren/moderneren Architektur.
Ich stelle es mir ungefähr so vor: Auf Serverseite läuft ein Service der als Einziger die Berechnungen durchführen kann und die Ergebnisse in die DB schreibt. Er gibt Auskunft über der aktuellen Status, d.h. ob er gerad rechnet, von wem das letzte Ergebis ist etc. Um Ergebnisse abzufragen oder Daten zu pflegen gibt es Webservices die diese Funktionalitäten bereitstellen.
Als Clients könnte man dann nehmen was man möchte. Browser über evtl. ASP.net, Thinclients die mit den Webservices kommunizieren, etc etc
Jetzt stellt sich mir die Frage nach den zu verwendenden Techniken. Den Service würde ich mit MFC erstellen, da die ganze Logik schon in MFC vorliegt. Webclient über ASP.net? Wir haben hier viele .net-Entwickler so dass sich ASP.net anbieten würde.
Aber wie könnte man die Authentifizierung regeln? Wie kann man benachrichtigt werden, wenn ein anderer Nutzer einen Datensatz geändert hat? Hat jemand Beispiele für diese Art von Anwendung (im günstigsten Fall .net und OpenSource damit man auch mal unter die Haube schauen könnte) Gibt es Frameworks für solche Szenarien?
Sollte ich Sachen präzisieren sollen, sagt Bescheid.
Die Kommunikation würde ich mit WCF realisieren denn dann hast du ach die Möglichkeit einen Callback Channel zu konfigurieren. Über diesen kannst du vom Server aus auf dem Client Events aufrufen. Dazu würde ich mir das WCF Publisher Subscriber Framework von Juval Löwy anschauen.
Zu Deinem Problem bietet sich nach meinen Erfahrungen folgendes an: - eine zentrale Datenbank mit den Daten und Verwaltungstabellen Die Verwaltungstabellen würden Änderungen sitzungsübergreifend speichern, denn ich gehe davon aus, dass sich die Nutzer mit Name/Passwort anmelden müssen. Dabei kann z.B. in den Verwaltungstabellen eine Sitzung eröffnet werden. Laufende Sitzungen über einen bestimmten Datensatz(bereich) können so erkannt und im Frontend dargestellt werden. Für das Problem der Speicherung muss die Intelligenz im Webservice untergebracht werden. Meine Empfehlung wäre hier, ein zentraler Webservice mit möglichst "hochwertigen" Funktionen, sodass nur wenige Rufe notwendig sind. Für die Verbindung kann z.B. WCF verwendet werden.
Wenn es nicht so auf Geschwindigkeit ankommt, dann ist SOAP für Webservices eine gute Wahl; REST hat sich inzwischen auch etabliert - der Overhead ist nicht so groß wie bei SOAP, sodass derartige Dienste häufig schneller sind und mehr Abfragen verkraften.