Wcf транзакция - PullRequest
       1

Wcf транзакция

2 голосов
/ 07 апреля 2010

Есть ли способ узнать в операции wcf, что транзакция совершена?

Хорошо, вторая попытка сделать более точной.

Я получил службу WCF с разрешением потока операций с транзакцией.

Теперь, когда клиент вызывает мою службу wcf, он может иметь транзакцию.Но мой сервис также заинтересован в том, чтобы транзакция на клиенте прошла успешно.Потому что на моем уровне обслуживания wcf, если все прошло хорошо.У него есть другие дела, но только если все транзакции были зафиксированы ....

Есть ли какое-то событие, на которое я могу подписаться или что-то в этом роде?

Ответы [ 3 ]

2 голосов
/ 07 апреля 2010

Это зависит от самого сервиса и от того, как вы обрабатываете транзакции. Если вы участвуете в транзакциях в WCF через WS-Transaction , то, если вызов клиенту завершается без исключения, вы можете предположить, что транзакция состоялась.

Однако, если это происходит в контексте другой транзакции, вы не можете быть уверены, прошла ли транзакция до завершения содержащейся транзакции.

Даже если вы используете класс TransactionScope , если у вас включена служба для использования транзакций, вам все равно придется учитывать охватывающую транзакцию (если есть).

Вам потребуется предоставить больше информации о том, где транзакция связана с вызовом, чтобы получить более полный ответ.

0 голосов
/ 28 января 2012
bool isTransactionComplete = true;
try
{
    using (TransactionScope trScope = new TransactionScope(TransactionScopeOption.Required))
    {
        //some work
        trScope.Complete();
    }
}
catch (TransactionAbortedException e)
{
    //Transaction holder got exception from some service
    //and canceled transaction
    isTransactionComplete = false;
}
catch//other exception
{
    isTransactionComplete = false;
    throw;
}

if (isTransactionComplete)
{
    //Success 
}

Как писал casperOne, это зависит от настроек. Но вы должны знать о сложных транзакциях, таких как

1) сеанс обслуживания и одновременных транзакций для одного экземпляра службы

2) транзакция внутри транзакции

0 голосов
/ 08 апреля 2010

Попробуйте использовать атрибут поведения операции выше, в вашей операции, которая разрешает TransactionFlow:

[OperationBehavior(TransactionScopeRequired=true)]

Если транзакция поступает от клиента, то служба будет использовать ее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...