Nicht sicher, dass Sie uns genug gegeben haben, um weiterzumachen, aber wenn ich richtig lese, versuchen Sie sicherzustellen, dass Sie eine Transaktion über Ihren WCF-Dienst unterstützen können? Während Ihre Datenbank keine Transaktionen unterstützt und Ihre WCF-Endpunkte sich hinter einem Lastenausgleich befinden? Habe ich das richtig? Wenn ja ...
Da Ihre DB keine Transaktionsunterstützung hat, wird diese auf Ihre WCF-Ebene verschoben. Dies deutet auf eine grobe Granularität in Ihren Methoden hin, sodass Sie sicherstellen können, dass ein einzelner Aufruf für Ihren WCF-Service Ihre Transaktion ausreichend umfasst. Verbreiten Sie eine Transaktion nicht über mehrere WCF-Aufrufe hinweg, sondern um Probleme.
UPDATE: Es gibt Strategien, die mit Loadbalancer, die Persistenz unter Verbindungen gewährleisten eingesetzt werden können, aber das wird man hier nicht helfen. Wenn Sie EditEntity() fortlaufend aufrufen und der erste Eintrag eine Transaktion initiieren soll und der zweite Eintrag eine Transaktion abschließen soll, ist Ihr Service nicht granular genug.
Konsolidieren Sie diese beiden Aufrufe zu einer Methode, d. H. EditEntityComplete().
Gibt es einen Grund, dass Sie keine 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. Die betreffende Methode führt eine Reihe von Schritten aus, die der Reihe nach ausgeführt werden müssen. Die WCF-Methode stellt Opportunities für Concurrency-Contention dar, um die Schrittvervollständigung in der richtigen Reihenfolge zu verletzen.
Wenn Sie davon ausgehen, dass Sie keine Rückgabedaten von der Funktion benötigen, sollten Sie eine asynchrone Warteschlange in Erwägung ziehen, die Anforderungen von den WCF-Endpunkten protokollieren kann. Verarbeiten Sie dann die Warteschlange von einem einzelnen Hintergrundprozess.
FINAL REVISION:
Reconsider die Anforderung nicht auf den Datenspeicher zu ändern.
Angesichts der Anforderungen für mehrere Clients, Notwendigkeit für die Skalierung, Lastverteilung und transaktionale Unterstützung im Datenspeicher, ein letzter Vorschlag - drücken, um die Datenbank zu ändern. Dies zu verstehen, ist eine statische Anforderung, aber Sie werden viel Mühe darauf verwenden, Transaktionsunterstützung zu implementieren, wenn viele einfache Datenbankplattformen diese für Sie bereitstellen. Der Versuch, diese Funktionalität neu zu erstellen, hat wenig, aber eine Menge Nachteile.
Danke. Ihre Zusammenfassung ist korrekt. Problem ist, dass die WCF-Schicht auf mehrere Boxen verteilt wird - d. H. Skaliert. Ich habe meine Frage aktualisiert. – ng5000
Es gibt nur eine Methode. Es wird jedoch von zwei verschiedenen Clients aufgerufen, und jede Anforderung wird von einer anderen physischen Box bedient. – ng5000
OK, ich glaube, ich verstehe jetzt besser. Es klang, als ob zwei aufeinander folgende Aufrufe von EditEntity() erforderlich wären, um eine Transaktion abzuschließen. – jro