WCF 4.0 SOA Commit как перевод - PullRequest
       19

WCF 4.0 SOA Commit как перевод

3 голосов
/ 10 ноября 2010

В WCF 4.0, как я могу зафиксировать 3 разных сервисных операции как одну транзакцию? (Зафиксировать в SOA)

У меня есть 3 разные службы WCF, как показано ниже. Каждый метод службы вызывает операцию БД

service1.CreateEmployee();

service2.SendSetupRequestForEmployee();

service3.GiveOfficePermissionToEmployee();

Даже если одна операция не удалась, все должно быть отменено ... любая помощь приветствуется.

1 Ответ

5 голосов
/ 10 ноября 2010

Краткий ответ: Сделайте ваши сервисные вызовы под TransactionScope и убедитесь, что сами вызовы настроены на выполнение транзакций.

TLDR читать эту статью здесь .

По сути, вам нужно украсить свой метод операционного контракта следующим образом:

[TransactionFlow(TransactionFlowOption.Allowed)]
void MyWcfServiceCall() {...}

и метод обслуживания вызывает себя с:

[OperationBehavior(TransactionScopeRequired = true)]
void MyWcfServiceCall() {...}

и звоните под TransactionScope

using (TransactionScope tx = new TransactionScope(TransactionScopeOption.RequiresNew)) {
    myServiceClient.MyWcfServiceCall();
    myOtherServiceClient.MyOtherWcfServiceCall();
    tx.Complete();
}

в вашем конфигурационном файле для привязок, установите транзакцию Flow на true:

<bindings>
    <wsHttpBinding>
        <binding name="MyServiceBinding" transactionFlow="true" ... />
    </wsHttpBinding>
</bindings>
...