У меня довольно простой сервис WCF. Большинство сервисных вызовов выполняются за 300 мс или меньше. Загрузка от этих звонков будет довольно легкой.
Однажды «отчетный» вызов - это длительный (от 10 до 15 минут) вызов. Процессор связан с IO, происходящим только в первые и последние несколько миллисекунд вызова. Эти звонки должны быть последовательными.
Во время звонка с сообщением я хочу опросить службу о ее прогрессе. Я надеялся, что просто настрою два ServiceHosts ... один с ConcurrencyMode.Single для долговременных отчетов и один с ConcurrencyMode.Multiple для опроса.
Тем не менее, после выполнения вызова «создания отчетов» (с привязкой ЦП системы к 100%) вызовы состояния опроса никогда не поступают в службу. Я надеялся, что планировщик ЦП ОС позволит новым запросам иметь часть ЦП, но это не совсем так.
Я прочитал еще один вопрос о том, что .NET ThreadPool может не создавать новые потоки при высокой загрузке процессора. «Отчетный» вызов поступает в стороннюю DLL, поэтому у меня нет очевидного способа остановить этот процесс обратно.
Есть какие-нибудь идеи о том, как позволить вызовам опроса обрабатываться параллельно с продолжительным вызовом "отчетности"?
(я использую netTcpBinding.)