Написание пользовательских сообщений WCF с поддержкой транзакций - PullRequest
0 голосов
/ 25 августа 2010

Я использую пользовательское сообщение, которое наследует System.Servicemodel.Channels.Message.
Мое пользовательское сообщение получает коллекцию IEnumerable, которая извлекается из базы данных.
Служба WCF является транзакционной (которая уже проверена),

MS-DTC включен.

Проблема заключается в том, что при использовании защищенного переопределения void OnWriteBodyContents (модуль записи XmlDictionaryWriter) выполняется в пользовательском сообщении, транзакция отсутствует.
System.Transactions.Transaction.Currentнулевой.при выполнении сервиса поток транзакций работает нормально, но когда сообщение записывается механизмом WCF, создается впечатление, что оно вышло из транзакции, что приводит к выполнению команды DB (извлечения данных) без транзакции.
Пожалуйстаобратите внимание, что если я передаю простой массив вместо IEnumerable, действие БД выполняется под транзакцией, но я хочу, чтобы оно выполнялось параллельно с записью ответа.

Любые идеи, пожалуйста, почему транзакция отсутствует ичто можно сделать, чтобы активировать его?

большое спасибо!
Тамир.

1 Ответ

1 голос
/ 25 августа 2010

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

...