У меня есть веб-сайт asp.net mvc, размещенный на Windows Server 2012r2 Standard, который использует KnockoutJS для отображения данных в сетке. Этот сервер предназначен для процесса, с которым у меня возникли проблемы - он не обслуживает никаких других запросов.
Вызов ajax выполняется для действия GetRecords контроллера. Это очень быстро возвращает данные для пары десятков записей.
Пользователь может вносить изменения в данные и отправлять их на обновление. Код нокаута делает еще один вызов ajax, на этот раз отправляя записи. На этом этапе сайт «зависает» на долгое время (более 10 минут), но завершается успешно, и обновленная дата сохраняется в базе данных. Во время «зависания» загрузка ЦП для рабочих процессов IIS колеблется около отметки 50%.
Я пытаюсь выяснить причину задержки. Кажется, что задержка происходит до того, как будет достигнута первая строка кода действия контроллера. Я добавил к действию операторы трассировки и вижу, что после выполнения первой строки действие завершается в течение нескольких секунд.
В диспетчере IIS я углубился в «Рабочие процессы» \ «Текущие запросы», пока страница «зависла», я вижу, что состояние указано как «ExecuteRequestHandler», а имя модуля - «ManagedPipelineHandler» . Другие "Текущие запросы" не отображаются.
Используя инструменты разработчика Chrome, я захватил json, который публикуется для обновления, его размер составляет около 4 МБ.
Я исключил, что проблема вызвана пропускной способностью, потому что я тестировал в браузере, работающем локально (на веб-сервере), и получаю такую же задержку.
Есть ли какие-либо предложения по изменениям конфигурации, которые я могу внести в IIS для повышения производительности публикации?