[WCF] Асинхронность внутри сервиса
От: Митяй Россия http://dkomanov.livejournal.com
Дата: 10.10.10 13:28
Оценка:
Возникли проблемы в нагруженных WCF-сервисах — большое количество исключений по таймауту. После некоторых поисков выяснилось, что проблема в "длительных операциях", т.е. в сервисе есть несколько методов: некоторые выполняются относительно кратко, а некоторые долго. Долгие операции — это вызовы других WCF-сервисов и вызовы БД.

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

В ASP.NET есть асинхронные операции, которые возвращают рабочий поток (Worker Thread) в общий пул, пока асинхронные операции выполняются. Хотелось бы в WCF-сервисе использовать нечто подобное — чтобы длительные операции на все wait'ы освобождали пул рабочих потоков WCF.

Сразу оговорюсь, что я в курсе про OperationContractAttribute.AsyncPattern, однако он не решает проблемы нескольких wait'ов в сервисе + не хочется менять вид контракта с синхронного на асинхронный (и тем самым ещё и клиентов переписывать).

P.S. Понятно, что можно разделить долгие/короткие операции в разные сервисы и с помощью throttling регулировать загрузку (для котортких меньше, для долгих больше), но на мой взгляд это не очень "красиво".
wcf throttling async scalability
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.