Ошибка HTTP 503. Услуга недоступна на простом веб-сайте ASP.NET 4.0
Что-то странное произошло на моем локальном ноутбуке: мой веб-сайт, который работал локально долго, не запускается...
Попытка локализовать проблему, я создал простой веб-сайт только с файлом index.html. Он отлично работает в ASP.NET 2.0, но когда я переключил App Pool на использование 4.0, он перестает работать.
Когда я открываю веб-сайт в браузере, он показывает следующую ошибку:
Сервис недоступен
Ошибка HTTP 503. Услуга недоступна.
И заставляет App-пул также останавливать работу... В журнале системных событий в разделе "Приложения" у меня есть:
Рабочий процесс не смог правильно инициализироваться и поэтому не мог быть запущен. Данные являются ошибкой.
Просьба сообщить. Невозможно найти что-либо, связанное с Google...: (
P.S. У меня есть VS2010, Windows Vista x64, последние обновления установлены, VS SP1 также установлен...
Ответы
Ответ 1
Я переустановил .NET 64 - это помогло.
P.S.
Кажется, что либо некоторые файлы в папке "C:/windows/Microsoft.net/Framework64/v4.0.30319/", либо я удалил их сам (VS иногда жалуется на файлы в "Временные файлы ASP.NET" и их удаление помогает)... Наверное, я не обращал внимания, что эти папки не временные...
P.P.S.
В этом случае, почему VS жаловался на файлы в папке "C:/windows/Microsoft.net/Framework64/v4.0.30319/"... нормально, теперь трудно сказать.
Ответ 2
Мне пришлось запустить пул приложений, который был настроен для моего сайта, и автоматически остановился на некоторой ошибке. (IIS (7.5 in my case)->Application Pools->Start stopped application pool.)
Ответ 3
Похоже, вы забыли включить расширение .Net 4 в IIS. Попробуйте найти и включить его в ограничениях ISAPI и CGI
http://blogs.msdn.com/b/rakkimk/archive/2007/08/17/iis7-where-is-the-web-services-extensions-option-which-was-there-in-iis6.aspx
На основе комментария может быть, что часть фреймворка была удалена, и в этом случае было бы разумно переустановить Framework 4, сначала очистив его. Попробуйте это сообщение в блоге, которое получило ссылку на инструмент, который автоматизирует очистку процесса http://blogs.msdn.com/b/astebner/archive/2008/08/28/8904493.aspx
Ответ 4
Существуют незначительные изменения между ASP.NET 2.0 и 4.0 в отношении запуска приложения. Например, вы не можете получить доступ к объекту HttpContext во время события Application_Start в ASP.NET 4.0. Есть ли у вас код, который может скрыть исключение из-за этого?
Есть несколько проблем, которые могут привести к остановке AppPool. Тот, который я натолкнулся на себя, заключается в том, что любое необработанное исключение в потоке, отличном от потока рабочих запросов, приведет к тому, что AppPool в конечном итоге остановится. Это не немедленная проблема, но в конечном итоге она прекратится. Время выполнения ASP.NET отслеживает, как часто ваше приложение терпит неудачу, и если он нарушает этот порог, AppPool останавливается, снимая с него все приложения, которые используют этот пул. Исключение StackOverflowException или OutOfMemoryException в конечном итоге будет иметь такой же эффект, это критические ошибки и не должно происходить в вашем ежедневном производственном коде.
Я бы рассмотрел изменения между ASP.NET 2.0 и 4.0 и посмотрел на необработанные исключения. Вы также можете изменить способ обработки исключений Visual Studio (проверьте в разделе "Отладка" > "Исключения" ) и сломайте их, независимо от того, обрабатываются они или нет, это быстрый, но очень подробный способ поиска каких-либо исключений.
Ответ 5
Я бы рекомендовал проверить разрешения безопасности для папки, используемой в качестве корня сайта. Запуск рабочего процесса, вероятно, не выполняется, поскольку он не может прочитать web.config
в этой папке.
Если вы создаете новое приложение в диспетчере IIS, по умолчанию он создаст новый пул приложений с тем же именем. Проблема заключается в том, что этот пул работает под новым идентификатором с именем IIS APPPOOL\yourSiteName
(на странице "Пулы приложений" это указано как ApplicationPoolIdentity
).
Это имя не существует до создания пула, поэтому папка в настоящее время не предоставляет доступ для чтения, а затем рабочий процесс терпит неудачу, так как он не имеет доступа.
Если вы хотите использовать этот идентификатор, вы можете использовать элемент Edit Permissions
в контекстном меню сайта и перейти на вкладку "Безопасность", отредактировать элемент Security
непосредственно через проводник или использовать с помощью таких инструментов, как icacls.exe
(рекомендуется для повторяемости).
Вы также можете изменить идентификатор пула Network Service
или определенного пользователя. Я бы сильно отказался от использования Local System
, поскольку он предоставляет слишком много разрешений, а Local Service
имеет другие ограничения.
ПРИМЕЧАНИЕ. Если вы добавите ApplicationPoolIdentity
в диалоговом окне "Безопасность", учетные записи IIS APPPOOL
не отображаются, если вы используете параметры "Дополнительно" / "Найти". Вам нужно вручную ввести целую строку "IIS APPPOOL\yourSiteName
", затем нажмите кнопку Check Names
, чтобы проверить - если она действительна, диалоговое окно заменяет ваш текст только yourAppName
, подчеркнутым.
Ответ 6
Перейдите в IIS и измените пул приложений на DefaultAppPool для вашего веб-приложения.
Ответ 7
Мне пришлось обновить учетные данные сети и не обновлять "PhysicalPathCredential" для приложения в IIS. Это исправлено.
Ответ 8
Я думаю, что в этом случае, если вы заходите в пулы приложений под ur IIS. Найдите пул приложений, на котором вы работаете на своем веб-сайте. Я уверен, что он остановлен, поэтому просто перезапустите его, и вам будет хорошо идти.
Ответ 9
Моя единственная проблема заключалась в пуле приложений, который показывал значок остановки.
Я указал приложение на другой AppPool и вернулся. Надеюсь, что это поможет.
Ответ 10
Если это кому-то поможет, я столкнулся с этим, пытаясь вернуть список Entity Framework 4 `EntityObject 'из Web Api. Чтобы исправить это, я просто сделал его явным выбором, поскольку EntityObjects не любят сериализоваться и заставляют мой пул приложений останавливаться.
return Request.CreateResponse(HttpStatusCode.OK, people.Select(p => new {
p.Id,
p.Name,
p.CreateDate
}));
Ответ 11
do aspnet-iisreg -i
, и он решит вашу ошибку.