ASP.NET Core хостинг - 500 внутренних ошибок сервера
Я пытаюсь опубликовать как ASP.NET Core проект с хостинг-провайдером, который поддерживает ASP.NET Core. Я получаю 500 внутренних ошибок сервера, которые я считаю очень распространенными. Поэтому я искал в Интернете и на различных форумах, а затем проверил processPath="%LAUNCHER_PATH%" arguments="%LAUNCHER_ARGS%"
в web.config, и они выглядят корректно с помощью processPath="dotnet" and arguments=".\MyApplication.dll"
.
Я также проверил строку подключения, и она указывает на рабочий сервер БД, который работает. Я подтвердил соединение с БД, изменив строку подключения на производственную БД и запустив локальный проект. Это работает, и я получаю доступ к производственной БД.
Я также попытался получить информацию об ошибке, используя приведенный ниже файл Startup.cs (независимо от env):
app.UseDeveloperExceptionPage();
app.UseDatabaseErrorPage();
app.UseBrowserLink();
Я также включил stdoutLog в web.config, но и этой папки не вижу:
stdoutLogEnabled="true" stdoutLogFile=".\logs\stdout"
Я также пытался изменить applicationUrl и launchUrl в файле launchSettings.json на свой URL-адрес, но это не сработало.
Итак, 500 Internal Server Error отказывается исчезать, и у меня до сих пор нет полезного сообщения об ошибке. Страница просто говорит:
К сожалению.
внутренняя ошибка сервера 500
Произошла ошибка при запуске приложения.
Я был бы очень признателен, если бы кто-то мог помочь мне здесь.
Ответы
Ответ 1
Я также включил stdoutLog в web.config, но я не вижу эту папку:
stdoutLogEnabled = "true" stdoutLogFile = ".\logs\stdout"
Здесь есть один трюк: вы должны создать обе папки logs
и stdout
вручную - тогда и только тогда IIS создаст файл журнала внутри папки logs
(не stdout
, как вы могли бы ожидать) спросите меня, почему, потому что я не знаю, почему;)
К сожалению. 500 Внутренняя ошибка сервера Ошибка при запуске приложения.
Обычно, проблемы с конфигурацией в Startup.cs - наиболее распространенные проблемы включают проблему с самим БД, проблему с миграциями (если вы используете подход Code First), проблемы с appsettings.js, проблемы с Social Logins учетные данные (например, отсутствует SecretKey)...
Обратитесь к файлу журнала в .\logs\stdout
- это самый быстрый способ найти сведения о проблеме:)
app.UseDeveloperExceptionPage();
app.UseDatabaseErrorPage();
Те будут работать после полного запуска вашего WebApp, но не при запуске приложения.
Ответ 2
Спасибо Лукасу за его комментарии. Я смог просмотреть журнал, и он заявил, что необходимо указать параметр ClientId. Проблема была в UserSecrets. Поскольку secrets.json доступен только в Development, в Production не было секретов. Как только у меня были секреты в моем appSettings.json, он работал нормально.
Кроме того, Чтобы реплицировать это в локальной среде, просто перейдите в свойства проекта и измените переменную окружения ASPNETCORE_ENVIRONMENT на "Production" и запустите на локальном компьютере. Это приведет к репликации ошибки внутреннего внутреннего сервера 500, и вы получите сообщение об ошибке.
Ответ 3
Я хотел бы добавить дополнительную информацию в ответ @Lukasz Makowej.
Я узнал причину, по которой нужно создать папку, в документации Microsoft говорится, что:
stdoutLogFile - Необязательный строковый атрибут.
"..... Любые папки, указанные в пути, должны существовать, чтобы модуль мог создать файл журнала..."
Поэтому вы должны создать его самостоятельно :) Проверьте это здесь:
https://docs.microsoft.com/en-us/aspnet/core/host-and-deploy/aspnet-core-module?view=aspnetcore-2.0
Я также должен сказать, что в моем случае я должен был подтвердить, что на веб-сайте есть разрешения на доступ к папке "Журнал".
Ответ 4
Также убедитесь, что установлен пакет ASP.NET Core Windows Server Hosting. Это создает обратный прокси-сервер между IIS и сервером Kestral.
Дополнительная информация:
https://docs.microsoft.com/en-us/aspnet/core/publishing/iis?tabs=aspnetcore2x#tabpanel_tfsY37MhAQ_aspnetcore2x
Ответ 5
Убедитесь, что ваш web.config хорош. Меня не раз топал синтаксически хороший web.config, ссылающийся на модуль (Rewrite), которого не было на сервере. Никаких сообщений об ошибках нигде, кроме 500 ошибок ответа.
Ответ 6
Журнал Std не работал для меня, мне пришлось удалить все версии.ent Core runtime/SDK с сервера и моего локального, чтобы установить последнюю версию, и она работала после публикации всего с нуля.
Еще одна вещь, которая помогла, - привязать приложение IIS к порту 5000 без каких-либо dns, чтобы он действительно показывал мне ошибки на http://localhost: 5000
Ответ 7
в файле web.config изменить модули = "AspNetCoreModuleV2" на модули = "AspNetCoreModule"
и посмотрите это видео https://www.youtube.com/watch?v=clCR3k6kkD8