Подтвердить что ты не робот

Ошибка 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 также установлен...

4b9b3361

Ответ 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, и он решит вашу ошибку.