2009-03-20 18 views
2

Eine typische 3-Tier-App wurde an zwei Remote-Standorten bereitgestellt. Die db hinter den beiden Installationen enthält genau die gleiche Struktur und die gleichen Daten. Zwischen den beiden Back-End-Datenbanken muss ein Replikationsmechanismus vorhanden sein, um sie synchron zu halten. Die native Replikationsfunktion von SqlServer würde die Aufgabe übernehmen. In der Business-Schicht der App werden jedoch viele Daten zwischengespeichert. Wenn ich Replikation auf Datenbankebene verwende, wird der Cache in der Business-Schicht nicht mehr synchronisiert.Benachrichtigungs-App von SqlServer

Gibt es eine Möglichkeit, SQL-Trigger zu erstellen, die die Business-Schicht über Änderungen benachrichtigen?

DB: SQLServer2005 oder 2008, Business-Schicht: C#

+0

welche Art von Daten zwischengespeichert wird und wo? Wie bricht die SQL Server-Replikation Ihre Anwendung und welche Art von Replikation haben Sie versucht? –

+0

Normalerweise ist es nicht sinnvoll, abgeschlossene Transaktionen im Client zwischenzuspeichern. In der Tat sollte "abgeschlossen" durch "wurde in der Datenbank getätigt" definiert werden. Haben Sie es anders umgesetzt? – dkretz

Antwort

1

Complex Eine Option: Wenn Sie statische IP Sie WCF verwenden können (TCP/IP oder SOAP) in der App und nennen es SQL CLR verwenden, die Sie sonst könnte WCF Peer-to-Peer verwenden, obwohl es mit den Grenzen von SQL CLR schwer sein kann. Um einen Schritt weiter zu gehen, könnte die SQL-CLR mit dem lokalen Programm sprechen, das dann den anderen die Aktualisierung mitteilt.

Einfachere Option B: Site A löscht den Cache auf die Seite und setzt ein Flag in der DB, SQL-Replikation packt es, Seite B, die er zur den Cache und das Flag löscht. Der Cache wird von beiden Standorten gelöscht, sobald eine Disparität gefunden wird.

0

Ich habe Message Queuing für diese Funktionalität verwendet. Diese Lösung bewältigt auch die Ausfallzeiten zwischen den Apps. Stellen Sie nur sicher, dass Sie die Warteschlange als Transaktionsqueue erstellen, um sicherzustellen, dass Nachrichten bei einem Stromausfall gespeichert werden.

Siehe http://www.codeproject.com/KB/database/SqlMSMQ.aspx für ein Beispiel, wie es zu benutzen, auf SQL Server 2005.