TransactionScopeAsyncFlowOption не передается от клиента WCF к службе - PullRequest
0 голосов
/ 05 мая 2018

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

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

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

1 Ответ

0 голосов
/ 06 мая 2018

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

...