Я думаю, что я знаю, что здесь происходит, но будет благодарен за подтверждение и/или материал для чтения, который может превратить это «думать» в просто «знать», актуальные вопросы на конец поста в разделе Tl, DR:ASP.Net MVC Отложенные запросы, поступившие после закрытия браузера клиента
Сценарий:
Я нахожусь в середине тестирования моего MVC приложения для случая, когда один из внутренних компонентов буксуют (таймауты подключения к нашей базе данных).
На одной из моих веб-страниц есть JQuery datatable, которая запрашивает обновление через ajax каждые полсекунды - моя текущая задача - отображать правильную ошибку, если эти данные запрашивают время. Поэтому, чтобы проверить, я сделал хранимая процедура, которая просит сервер БД ждать 3 секунды, прежде чем отвечать, что больше, чем настроенные настройки таймаута, поэтому это гарантирует исключение тайм-аута для меня.
Я тестирую браузер Chrome, один клиент. Применение отлаживается в VS2013 IIS Express
Проблема: Не ожидал следующие симптомы, чтобы показать, когда мой целеустремленный замедлиться активируется:
1) После запуска страницы с сфальсифицированы DataTable, приложение замедлилось при обработке всех запросов от клиентского браузера - есть еще 3 компонента, которые отправляют запросы обновления ajax, параллельные тому, который я целенаправленно нарушил, и это же замедление также применяется к любым действиям, которые я сделал в веб-приложении, которое будет генерировать запрос (например, переходить на другие страницы). Отладчик браузера показал, что запросы были отправлены вовремя, но соответствующие точки останова на стороне сервера стали получать гораздо позже (задержки от 10 секунд до нескольких минут)
2) Мой сервер продолжал обрабатывать запросы даже после закрытия вкладки с приложением. Я закрыл браузер, я убедился, что процесс chrome.exe завершен, но контрольные точки на разных действиях Controller по-прежнему попадают в течение 20 минут после этого - в основном на действия, которые были «вызваны», автоматически зацикливая запросы ajax с нескольких страниц I пытался посетить во время моих тестов. Кроме того, на основных страницах, на которые я пытался перейти, были удалены точки останова. Во втором тесте я использовал RawCap для контроля интерфейса loopback, чтобы убедиться, что ничего не происходит, когда запросы выполняются в фоновом режиме.
Теория Я хотел бы подтвердить или опровергнуть с альтернативным объяснением:
Так выше сценарий делает петельные запросы на частоте, что сервер не может обработать - клиент DataTable цикла отправлял их каждые .5 секунд , и для создания тайм-аута каждый из них занимает не менее 3 секунд. И, очевидно, где-то в IIS выражается, что должно быть предел количества параллельных запросов, которые он может обрабатывать ...
Что для меня было неожиданным, так это то, что я предположил, что если этот предел (который я также предположил чтобы существовать), тогда запросы будут отклонены - вместо этого они выглядят в очереди на совершенно бесполезное количество времени для обработки позже - я имею в виду, по какому сценарию было бы полезно обработать запрошенный веб-запрос через полчаса ?
Так мои вопросы до сих пор являются следующие:
Tl, DR вопросы:
ли IIS Express (который поставляется с Visual Studio 2013) имеют параллельное ограничение соединения?
Если да: { Этот лимит настраивается где-то, и если да, то где?
Каким образом службы IIS обрабатывают ситуации, когда этот предел достигнут, - это то, что обработка также настраивается где-то? (Я не имею в виду, как очереди по сравнению с немедленной ошибкой, как сервер занят) }
Если нет: { Как сценарии ручки сервера, когда запросы приходят быстрее, чем они могут быть обработаны и может что обработка быть настроены в любом месте? }
Здесь - http://www.iis.net/learn/install/installing-iis-7/iis-features-and-vista-editions
Я обнаружил, что IIS7 по крайней мере, позволило неограниченное количество silmulatneous соединений, но как это на самом деле работает, если сервер просто не достаточно быстро, чтобы обрабатывать все запросы? Можно ли настроить лимит в любом месте, а также управлять достигнутым лимитом?
Поблагодарили бы за какие-либо ссылки на онлайн-материал для чтения по вышеуказанному.
Благодарим вас за разъяснения и ссылку. Я нахожусь в середине перехода на клиентскую сторону, чтобы использовать setTimeout для получения ответа на запросы AJAX. Я разместил этот вопрос как своеобразное подтверждение, что это решение, которое я пытаюсь сделать, действительно является правильным, так как я не уверен в очередности запросов. – user1250290