TransactedReceiveScope - когда фиксируется транзакция? - PullRequest
1 голос
/ 23 февраля 2011

Сценарий:

У нас есть рабочий процесс wcf с клиентом, который НЕ использует поток транзакций. Рабочий процесс содержит несколько последовательных TransactedReceiveScopes (с использованием корреляции на основе содержимого). TransactedReceiveScopes содержит пользовательские операции с БД.

Замечания:

Когда мы запускаем профилировщик SQL для первого вызова, мы видим все пользовательские вызовы БД и вызов SaveInstance в трассировке профиля.

Мы заметили, что, хотя SendReply находится в самом конце TransactedReceiveScope, иногда sendreply происходит за 10 секунд до принятия транзакции.

Мы попытались изменить TimeToPersist и TimeToUnload на ноль, но это не имело никакого эффекта. (Трассировка показывает, что SaveInstance в любом случае происходит немедленно, а фиксация кажется отложенной).

Вопросы:

Верны ли наши наблюдения?

В какой момент совершается транзакция? Похоже ли это на сборку мусора - то есть, он фиксируется через некоторое время, когда он не занят?

Существует ли какой-либо способ управления задержкой фиксации или единственный способ сделать это, чтобы использовать поток транзакций от клиента (и тогда все должно фиксироваться, когда клиент фиксирует транзакцию, включая постоянную).

1 Ответ

1 голос
/ 23 февраля 2011

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

...