Проблема рабочих потоков IIS - PullRequest
3 голосов
/ 16 февраля 2012

Мой сайт размещен на хостинге IIS.Сайт имеет функцию, которая нуждается в вызове службы WCF, а затем возвращает результат.Проблема заключается в том, что сайт обрабатывает вызов к службе WCF, другой вызов веб-сайта зависает и не возвращает контент быстро (это просто статический контент).Я установил два экземпляра Chrome с разными скриптами imacros, один из которых вызывает страницу, которая запрашивает службу wcf, а другой - просто статический контент.Итак, здесь я просто вижу, что, когда первая страница, которая запрашивает wcf-сервисы, зависает, еще одна страница также зависает, а когда выходит первая, вторая тоже.Я делаю что-то еще, чтобы получить возможность немедленно получать статический контент.

Ответы [ 5 ]

2 голосов
/ 25 февраля 2012

Я думаю, что здесь есть две отдельные проблемы:

  1. Почему страница, которая использует службу WCF, зависает
  2. Почему страница статического содержимого зависает

На странице, которая вызывает службу WCF, общая проблема заключается в том, что клиент WCF не закрыт. По умолчанию существует 10 соединений WCF с таймаутом 1 мин. Первые 10 вызовов проходят нормально (скажем, они выполняют i 2 секунды), затем приходит 11-й вызов, свободных wcf-соединений нет, поэтому необходимо подождать 58 секунд, пока соединение не истечет и станет доступным.

О том, почему ваша статическая страница зависает. Может случиться так, что ваш клиент разрешит только одно подключение к сайту, запрос на статическую страницу не будет отправлен до тех пор, пока запрос на страницу со службами wcf не будет завершен.

Вам следует проверить журналы IIS, чтобы узнать, сколько времени IIS сообщает о получении запроса.

1 голос
/ 25 февраля 2012

Ну, может быть, нет проблем ...

Это может быть ограничение на количество одновременных запросов в одном домене браузера.
Пока браузер не завершит запрос на первую страницу (страницу WCF), он не будет отправлять запрос на вторую страницу (статическую).

Попробуйте это:
Используйте разные браузеры для каждой страницы (например, chrome / firefox).
Или откройте в Chrome вторую страницу в окне инкогнито (Ctrl + Shift + N).
Или попробуйте получить доступ к каждой странице с другого компьютера.

1 голос
/ 25 февраля 2012

Рассмотрим такой сценарий: когда вы отправляете запрос в IIS, ваше приложение изменяет, удаляет или создает какой-либо файл вне папки App_Data. Обычно это файл журнала, который по ошибке помещается в папку bin приложения. Изменения файловой системы приводят к перезагрузке AppDomain IIS, так как он считает, что приложение было изменено, и, следовательно, произошла задержка. Это может относиться или не относиться к вашей проблеме, но это распространенная ошибка в приложениях ASP.NET.

1 голос
/ 16 февраля 2012

Я бы сказал, что это проблема с потоками. В этой статье MSDN KB есть несколько советов о том, как настроить поведение потоков ASP.NET:

http://support.microsoft.com/kb/821268

Из статьи - ... вы можете настроить следующие параметры в вашем файле Machine.config для наилучшего соответствия вашей ситуации:

  • maxWorkerThreads
  • minWorkerThreads
  • maxIoThreads
  • minFreeThreads
  • minLocalRequestFreeThreads
  • maxconnection
  • ExecutionTimeout

Чтобы успешно решить эти проблемы, выполните следующие действия:

  • Ограничить число запросов ASP.NET, которые могут выполняться одновременно, примерно до 12 на процессор.
  • Разрешить обратные вызовы веб-службы для свободного использования потоков в ThreadPool.
  • Выберите подходящее значение для параметра maxconnections. Основывайте свой выбор на количестве используемых IP-адресов и доменов приложений.

и т.д ...

0 голосов
/ 21 февраля 2012

Вы можете попробовать использовать AppFabric и посмотреть, что не так с вашими службами WCF http://msdn.microsoft.com/en-us/windowsserver/ee695849

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...