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