Frage

Grundarchitektur: n physische Boxen jeweils den gleichen WCF-Hosting-Service, Sitz begind einen Load Balancer. Jede Box eine einzelne Datenbank-Infrastruktur treffen, dass nicht Unterstützung Transaktionen - nicht fragen: (

Also, in der Datenzugriffsschicht meiner App brauche ich einige Methode der verteilten Transaktionen. Was sind meine Optionen?

Hinweis

, dass die Kunden auf mein System kommunizierten Legacy-Anwendungen werden mit grundlegendem Web-Service (Basichttpbinding) und glänzende neue WCF-Clients (NetTcpBinding oder NetNamedPipeBinding).


Bearbeiten 1

z. es wird ein einzelner Anruf in die WCF-Schicht auf physikalischem Kasten 1, beispielsweise sein, EditEntity (...). Dieser Aufruf wird 2 auslösen schreibt in die Datenbank. Nach dem ersten Schreib ruft ein anderer Client EditEntity (...) für die gleiche Einheit auf einer zweiten Instanz von meinem WCF-Dienst auf einem zweiten physikalischen Feld. Auf dem zweiten Feld, wie kann ich wissen, dass eine Transaktion für diese besondere Einheit ist bereits im Spiel?

Danke.

War es hilfreich?

Lösung

Nicht sicher, Sie haben uns genug gegeben zu gehen, aber wenn ich lese richtig um sicherzustellen, dass Sie versuchen Sie eine Transaktion durch Ihren WCF-Dienst unterstützen können? Während Ihre DB unterstützt Transaktionen nicht und Ihre WCF-Endpunkte hinter einem Load Balancer sitzen? Muss ich diese richtig haben? Wenn ja ....

Da Ihr DB nicht Transaktionsunterstützung hat, was sich bewegt, um Ihre WCF-Tier. Dies deutet auf eine grobe Ebene der Granularität in Ihren Methoden, so dass Sie Ihre Transaktion ausreichend einen einzigen Anruf zu Ihrem WCF-Dienst umfasst sicherstellen können. Verwenden Sie keine Transaktion über mehrere WCF verteilt Anrufe, bist du Ärger bringen.


UPDATE: Es gibt Strategien, die mit Loadbalancer eingesetzt werden können, die Persistenz unter Verbindungen gewährleisten, aber das werden Sie hier nicht helfen. Wenn Sie EditEntity sind () aufrufen nacheinander, und der erste Eintrag ist eine Transaktion einzuleiten, und der zweite Eintrag ist eine Transaktion abzuschließen ... dann Ihren Service reicht nicht körnig.

Konsolidieren diese beiden Anrufe auf ein Verfahren, das heißt EditEntityComplete ().

Gibt es einen Grund, dass Sie nicht eine Methode erstellen können, im Gegensatz zu zwei?


UPDATE # 2: Umformulierung der Frage - eine einzige Methode führt Einträge in einer Datenbank, die keine Transaktionen unterstützen. Das fragliche Verfahren führt eine Reihe von Schritten, die in Reihenfolge ausgeführt werden müssen. Die WCF-Methode stellt Möglichkeiten für die Gleichzeitigkeit Konkurrenz Schritt Abschluss in der richtigen Reihenfolge zu verletzen.

Mit dieser Grundlage vorausgesetzt, Sie benötigen keine Rückgabedaten aus der Funktion, sollten Sie eine asynchrone Warteschlange, die Anforderungen von den WCF-Endpunkten anmelden kann. Dann die Warteschlange verarbeiten, die von einem einzigen Hintergrundprozess.


FINAL REVISION:

Reconsider die Anforderung nicht auf den Datenspeicher zu ändern.

, um die Anforderungen für mehrere Kunden gegeben, müssen für die Skala, Load Balancing und Transaktionsunterstützung im Datenspeicher, einen endgültigen Vorschlag - Push um die Datenbank zu ändern. Dieses Verständnis ist ein statischer Anforderung, aber Sie werden viel Mühe aufwenden versuchen, Transaktionsunterstützung zu implementieren, wenn viele einfache Datenbank-Plattformen, die für Sie zur Verfügung stellen wird. Diese Funktionalität hat wenig auf den Kopf neu zu erstellen versuchen, aber viele Nachteile.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top