У нас есть приложение Windows, которое вызывает методы веб-сервиса для доступа к базе данных. Мы обнаружили случай, когда мы делаем длинный (15+ секунд) асинхронный вызов веб-службы службе WCF в IIS. Если пользовательский интерфейс делает другие, блокирующие (это старый код), вызовы веб-службы, пока это происходит, эти дополнительные вызовы блокируются до тех пор, пока не завершится первоначальный асинхронный вызов.
Этого не происходит, когда пользовательский интерфейс и веб-службы работают в Visual Studio с IIS Express: блокирующие вызовы выполняются быстро, и все эти действия завершаются задолго до завершения длинного асинхронного вызова.
Все веб-сервисы имеют следующее:
<serviceThrottling
maxConcurrentCalls="5000" maxConcurrentSessions="5000" maxConcurrentInstances="5000" />
Кроме того, maxConnections="500" везде.
Мы хотели бы, чтобы IIS обрабатывал эти одновременные вызовы веб-сервисов так же, как это делает IIS Express, одновременно.
...
Если это поможет, все это имеет смысл: мы ищем объекты. Поиск возвращает 50 лучших (по умолчанию) элементов, соответствующих критериям, и в то же время мы выполняем асинхронный вызов count(*) для того же запроса. Запрос подсчета может занять очень много времени. Пользователи настаивают на том, что иногда им нужно знать общее количество, но обычно они хотят иметь возможность открывать объекты в списке результатов задолго до того, как счетчик возвращается. При открытии объектов вступают в действие синхронные вызовы веб-службы. Раньше результаты поиска и подсчет были частью одного и того же метода веб-службы.