TransactionScopeAsyncFlowOption не передается от клиента WCF к службе

Мой метод службы WCF должен выполнять параллельные задачи в транзакции, которая передается от клиента к службе. Чтобы область транзакции могла проходить через потоки, я включил TransactionScopeAsyncFlowOption в конструкторе класса области транзакции перед отправкой вызова в службу.

using (var transaction = new TransactionScope(TransactionScopeAsyncFlowOption.Enabled))
{
    //service call here. Async flow option has no effect on service side.
}

Транзакция передается от клиента к сервису, но не может перейти к подзадачам. Однако, если я создаю новую область транзакции в службе и включаю там ее асинхронный поток, тогда транзакция переходит к подзадачам. Поэтому мой вопрос: почему опция TransactionScopeAsyncFlow не влияет на транзакцию в конце службы? Разве это не должно принимать настройки области транзакции клиента, чтобы не было необходимости создавать новую область транзакции в службе только для того, чтобы включить ее асинхронный поток?

1 ответ

Решение

Я нашел такой же вопрос и здесь. На самом деле происходит то, что WCF теряет почти весь свой контекст при превышении порога первого ожидания, и мы должны явно включить передачу любого окружающего контекста, такого как окружающая транзакция, к последующим асинхронным вызовам. Есть некоторые обходные пути, упомянутые в этой книге. Проверьте их, если вам нужно больше деталей. Я пойду с созданием новой области видимости перед асинхронным вызовом в сервисной операции.

Другие вопросы по тегам