WCF опашка и функция за транзакции

Има ли някаква готова поддръжка за поставяне на заявка за WCF услуга на опашка и извършването им в транзакция (от страната на сървъра)? напр.

Begin
Insert
Insert
Delete
Edit
Commit

Потребителят би стартирал опашката/транзакцията чрез извикване на begin, извикване на множество заявки за услуга и извършване чрез извикване на commit.

Имайте предвид, че това трябва да се свързва само с приложния слой, а не с базата данни.

Благодаря предварително!


person jaspernygaard    schedule 19.08.2011    source източник


Отговори (1)


Възможно е.

Трябва да използвате функциите за сесии и транзакционен поток на WCF.

Със сесия можете да контролирате в какъв ред трябва да се извикват вашите операции в рамките на сесия, като маркирате коя операция трябва да започне сесия и коя да я прекрати.

Transaction Flow ще запази транзакцията, която създавате от страна на клиента, пренесена към страната на сървъра и ще я поддържа.

Може да се обърнете към Активиране на потока на транзакция, WCF Transaction Propagation и Сесии, инстанциране и едновременност за повече подробности.

Не съм сигурен обаче как бихте развързали транзакция на приложение от слоя данни. Няма да има смисъл да поддържате транзакция на приложение, която няма да има контрол върху транзакцията на базата данни.

person SaravananArumugam    schedule 19.08.2011
comment
Съгласен, вие искате да прехвърлите транзакцията чак до базата данни, защото в противен случай; ще трябва да напишете код, за да приложите ръчно логиката за връщане назад. Повечето от основните търговски бази данни поддържат разпределени транзакции, така че това не трябва да е ограничение. Разбира се, тези видове транзакции ще възпрепятстват скалируемостта на приложението поради заключване на база данни, така че винаги има компромис. - person Sixto Saez; 19.08.2011
comment
Донякъде се надявах, че клиентът няма да трябва да създава клиентска страна на сесия и просто да извиква метода Begin от страна на сървъра. - person jaspernygaard; 19.08.2011
comment
телефонен разговор и 5 мин. по-късно... Някак си се надявах, че клиентът няма да трябва да създава клиентска страна на сесия и просто да извиква метода Begin от страна на сървъра. По отношение на транзакцията на приложение срещу база данни, моето безпокойство е използването на ODP.NET за комуникация с база данни на Oracle. Разбира се, бих използвал транзакция, за да ангажирам извикванията на услугата, независимо дали е отделена от WCF транзакцията. Не съм сигурен колко добре ODP.NET се свързва с WCF. Доколкото разбирам предложеният от мен сценарий не е жизнеспособен. Правилно? - person jaspernygaard; 19.08.2011
comment
Вашият сценарий може да бъде въведен както желаете, но ще бъде дълъг и сложен начин да направите нещо ръчно. Опитайте някои изследвания в ODP.NET, за да подкрепите вашия сценарий, може да работи по вашия начин, кой знае. Късмет. - person SaravananArumugam; 19.08.2011