Управление одновременными подключениями в IIS7

У меня проблема с моим хостинг-провайдером (winhost.com). Мое приложение построено на ASP.NET 4 MVC 3. Еще несколько дней назад все работало нормально. Внезапно я начал получать 503 ошибки при попытке доступа к моему сайту (wikipediamaze.com). Это происходит не постоянно, просто большую часть времени.

Когда кто-то начинает играть в игру, на wikipedia.org делается запрос, чтобы получить содержимое страницы для текущего шага головоломки. По сути, я очищаю экран wikipedia.org, добавляю HTML-код и затем отображаю результаты. Все мои веб-запросы закрываются сразу после получения данных.

Что winhost говорит мне, так это то, что соединения остаются открытыми и вызывают любые дополнительные запросы к сайту, чтобы получить ошибку 503 Service Unreachable. Что я вижу со своей стороны, так это то, что только 1 запрос может быть сделан на wikipediamaze.com за раз. Если вы продолжите обновлять страницу, вы в конечном итоге получите HTML, но все последующие запросы (css, изображения, js) получат ошибку 503. Даже страницы, которые никогда не ссылаются на wikipedia.org.

Если это была проблема с регулированием подключения в IIS, попадают ли входящие и исходящие (внутренние запросы) в одно и то же ведро? Если я уверен, что все мои соединения закрываются (и у меня никогда не было этой проблемы раньше), что еще может вызвать это?

Это размещенная среда, поэтому у меня связаны руки, и я знаю, что все это довольно расплывчато, но если у кого-то есть какое-то понимание, это было бы очень признательно.


person Micah    schedule 08.02.2011    source источник


Ответы (1)


Мое первое предложение — убедиться, что вы закрываете свои соединения (предпочтительно с помощью операторов Using), когда вы закончите с ними, потому что тогда их можно будет использовать повторно. Я знаю, вы сказали, что уже закрываете их, но иногда вам приходится избавляться от них.

В дополнение к этому вы можете изменить количество соединений, которые ваш сервер будет выполнять с другими серверами, добавив следующее в файл web.config.

<system.net>
    <connectionManagement>
        <add address="*" maxconnection="48" />
    </connectionManagement>
</system.net>
person Matthew Steeples    schedule 08.02.2011
comment
Я добавил это в конфигурацию и все еще имею ошибку. В моем приложении есть только два места, которые создают веб-запросы, и в обоих местах они заключены в оператор using. - person Micah; 08.02.2011
comment
Какой метод вы используете для выполнения веб-запросов? - person Matthew Steeples; 08.02.2011
comment
github.com/micahlmartin/WikipediaMaze/blob/ master/Source/ строка 140 - person Micah; 08.02.2011
comment
на самом деле в этом конкретном случае я не использую оператор using, а закрываю его в блоке finally. - person Micah; 08.02.2011
comment
Вы создаете экземпляр ResponseStream в строке 159, и от него также нужно избавиться. Очевидно, что без его запуска я не уверен, пойдет ли код по этому пути. - person Matthew Steeples; 08.02.2011
comment
В качестве альтернативы вы рассматривали использование класса WebClient для получения URL-адреса в виде строки или потока? Если вы не используете какие-либо расширенные функции HttpWebRequest (кроме UserAgent), вы можете упростить этот раздел. - person Matthew Steeples; 08.02.2011
comment
Я заменил весь этот раздел простым WebClient.DownloadString в операторе использования (спасибо за это), но проблема все еще остается. - person Micah; 08.02.2011
comment
Просто подумал, что это может быть связано с количеством потоков, которые вы запускаете одновременно. Можете ли вы реорганизовать код, чтобы он использовал асинхронный подход для получения данных и посмотреть, решит ли это вашу проблему? - person Matthew Steeples; 14.02.2011