ASP.NET Core 1.0 при ошибке IIS 502.5
Я только что обновил свой сервер (Windows 2012R2) до .Net Core 1.0 RTM
пакета хостинга Windows из предыдущего .Net Core 1.0 RC2
. Мое приложение работает на моем ПК без каких-либо проблем, но сервер продолжает показывать:
HTTP Error 502.5 - Process Failure
Common causes of this issue:
The application process failed to start
The application process started but then stopped
The application process started but failed to listen on the configured port
Ранее он работал с версией RC2. Не знаю, что может пойти не так.
Это все зритель событий говорит:
Failed to start process with the commandline 'dotnet .\MyWebApp.dll'. Error code = '0x80004005'.
В худшем случае журналы приложений пусты! Я имею в виду, что файлы stdout_xxxxxxxxx.log полностью пусты и все имеют размер 0 байтов.
Что мне делать? Как я могу узнать причину ошибки, если она не зарегистрирована?
Ответы
Ответ 1
Итак, у меня появился новый сервер, на этот раз это Windows 2008R2 и мое приложение отлично работает.
Я не могу точно сказать, в чем проблема со старым сервером, но у меня есть одна идея.
Поэтому, поскольку я ранее скомпилировал приложение без любой платформы, он дал мне версию dll
, которая работает только в том случае, если на целевом узле установлен пакет .Net Core Windows Hosting
. В моем случае он был установлен, и это было прекрасно.
После того, как приложение не работает, я решил скомпилировать его как консольное приложение с win7-x64
как время выполнения. На этот раз, когда я запустил exe
моего приложения на сервере, он разбился с ошибкой об отсутствующей DLL:
The program can't start because api-ms-win-crt-runtime-l1-1-0.dll is missing
Эта dll из универсального времени выполнения C, включенного в Visual С++ Redistributable для Visual Studio 2015.
Я попытался установить этот пакет (как x64, так и x86), но он терпел неудачу каждый раз (не знаю почему) на Windows Server 2012 R2.
Но когда я попытался установить их на новом сервере Windows Server 2008 R2, они успешно установили. Возможно, это и было причиной этого, но все равно не может сказать точно.
Ответ 2
Я смог исправить это, выполнив
"C:\Program Files\dotnet\dotnet.exe" "C:\fullpath\PROJECT.dll"
в командной строке, которая дала мне гораздо более значимую ошибку:
"Определенная структура" Microsoft.NETCore.App ", версия" 1.0.1 "не найдена. - Проверьте зависимости приложений и настройте версию фрейма, установленную по адресу: C:\Program Files\dotnet\shared\Microsoft.NETCore.App - Установлены следующие версии: 1.0.0. Кроме того, установите версию фрейма '1.0.1'.
Как вы можете видеть, у меня была неправильная версия NET Core, установленная на моем сервере. Я смог запустить мое приложение после удаления предыдущей версии 1.0.0 и установки правильной версии 1.0.1.
Ответ 3
У меня была такая же проблема, в моем случае это было недостаточное разрешение идентификатора пользователя моего пула приложений, на публикация на странице IIS asp.net doc, для этой ошибки есть пара причин:
- Если вы опубликовали автономное приложение, подтвердите, что вы не установили платформу в
buildOptions
of project.json
, которая конфликтует с RID публикации. Например, не указывайте платформу x86 и публикуйте с помощью RID win81-x64 (dotnet publish -c Release -r win81-x64
). Проект будет опубликован без предупреждения или ошибки, но с ошибкой с указанными выше исключениями на сервере.
- Проверьте атрибут
processPath
на элементе <aspNetCore>
в файле web.config, чтобы подтвердить, что он является dotnet
для переносного приложения или. \my_application.exe для автономного приложения.
- Для переносного приложения
dotnet.exe
может быть недоступно через настройки PATH. Убедитесь, что C:\Program Files\dotnet\
существует в настройках System PATH.
- Для портативного приложения
dotnet.exe
может быть недоступно для идентификации пользователя пула приложений. Убедитесь, что идентификатор пользователя AppPool имеет доступ к каталогу C:\Program Files\dotnet
.
- Подтвердите, что вы правильно ссылались на промежуточное программное обеспечение интеграции IIS, вызывая метод
.UseIISIntegration()
для приложений WebHostBuilder()
.
- Если вы используете метод расширения
.UseUrls()
при самообслуживании с помощью Kestrel, убедитесь, что он расположен до метода расширения .UseIISIntegration()
на WebHostBuilder()
. .UseIISIntegration()
должен установить Url
для обратного прокси при запуске Kestrel за IIS и не переопределить его значение с помощью .UseUrls()
.
В моем случае это была четвертая причина, я изменил ее, щелкнув правой кнопкой мыши мой пул приложений и в расширенных настройках в Process Model, я установил Identity для пользователя с достаточным разрешением:
![идентификатор пользователя моего пула приложений]()
Ответ 4
Я получил эту работу с жестким reset IIS (я только что установил пакет хостинга).
Оказывается, что просто нажать "Перезагрузка" в диспетчере IIS недостаточно. Мне просто нужно было открыть командную строку и ввести "iisreset"
Ответ 5
У меня была такая же проблема при публикации веб-приложения.
Если кто-то еще исправил эту проблему, изменив {AppName}.runtimeconfig.json
{
"runtimeOptions": {
"framework": {
"name": "Microsoft.NETCore.App",
"version": "1.1.2"
},
"configProperties": {
"System.GC.Server": true
}
}
}
Измените версию с "версии": "1.1.2" на "версия": "1.1.1" и все нормально работает
Ответ 6
У меня была та же проблема.
Чтобы узнать точный источник, я включил регистрацию в
Файл web.config:
<aspNetCore processPath="dotnet" arguments=".\MyWebService.dll" stdoutLogEnabled="**true**" stdoutLogFile=".\logs\stdout" />
и создана вложенная папка журналов в корневой папке MyWebService.
После перезагрузки IIS и попытки выполнить API у меня возникла ошибка, и у меня не хватило правильного Core Runtime. После загрузки установки DotNetCore.1.0.5_1.1.2-WindowsHosting ошибка исчезла.
Ответ 7
Если бы одна и та же проблема и все решения не работали. Нашел этот камень и подумал, что пройду, если это поможет кому-то другому. Установите на сервере 2012 R2 ошибку DLL, попробуйте переустановить VS С++ 2015 и получите сообщение об ошибке. Исправление состоит в том, чтобы сделать следующее:
Кажется, файл
C:\ProgramData\Package Cache\...\packages\Patch\x64\Windows8.1-KB2999226-x64.msu
установлены проблемы.
Откройте командную строку администратора:
c:
mkdir tmp
mkdir tmp\tmp
move "C:\ProgramData\Package Cache\...\packages\Patch\x64\Windows8.1-KB2999226-x64.msu" c:\tmp
expand -F:* c:\tmp\Windows8.1-KB2999226-x64.msu c:\tmp\tmp
dism /online /add-package /packagepath:c:\tmp\tmp\Windows8.1-KB2999226-x64.cab
ПРИМЕЧАНИЕ: замените "..." на правильное имя папки. После этого переустановите пакет VS С++ 2015.
Ответ 8
Я получил эту проблему на моем рабочем сервере после того, как проект VS был автоматически обновлен до .NET Core 1.1.2.
Я просто установил текущее время ядра 1.1.2.net на моем рабочем сервере: https://www.microsoft.com/net/download/core#/runtime
Ответ 9
SOLVED Я просто столкнулся с тем же вопросом сегодня, когда вы развертываетесь до AZURE. Затем я попробовал то же самое для локального IIS, получил ту же проблему. Поскольку я новичок в.net CORE, я боролся за несколько часов до того, как решил это.
В нашем решении после публикации в IIS я просмотрел файл web.confile, особенно под строкой <aspNetCore processPath="bin\IISSupport\VSIISExeLauncher.exe" arguments="-argFile IISExeLauncherArgs.txt" forwardWindowsAuthToken="false" stdoutLogEnabled="false"/>
В нашей папке развертывания сгенерированный файл web.config выглядит так: <aspNetCore processPath="dotnet" arguments=".\Yodlee.dll -argFile IISExeLauncherArgs.txt" forwardWindowsAuthToken="false" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout"/>
Теперь ПОЖАЛУЙСТА, попробуйте изменить <aspNetCore processPath="bin\IISSupport\VSIISExeLauncher.exe" forwardWindowsAuthToken="false" stdoutLogEnabled="false"/>
выше конфигурацию в решении visual studio на <aspNetCore processPath="bin\IISSupport\VSIISExeLauncher.exe" forwardWindowsAuthToken="false" stdoutLogEnabled="false"/>
В нашей новой папке развертывания сгенерированный файл web.config выглядит так: <aspNetCore processPath="dotnet" arguments=".\Yodlee.dll" forwardWindowsAuthToken="false" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout"/>
И это РЕШАЕТ мою проблему, надеюсь, это поможет.
Ответ 10
У меня была такая же проблема, когда я обновил свою машину dev до Core 1.0.1, но забыл обновить сервер.
Ответ 11
У меня была аналогичная проблема, и процитировать Шерлока Холмса:
"Когда вы устранили невозможное, что бы ни осталось, каким бы невероятным оно ни было, должно быть правдой?"
Я проверил, была ли платформа на платформе .NET, на которую я нацеливалась, была установлена на сервере, и оказалось, что это не так. Я установил 4.6.2.NET Framework и работал.
Ответ 12
У меня была такая же проблема. Я изменил идентификатор пула приложений на учетную запись сетевой службы. Затем я явно задал путь к dotnet.exe в файле web.config, чтобы приложение нормально работало, поскольку @danielyewright сказал в github комментарий. Он работает после установки пути.
Спасибо
Ответ 13
Поделиться тем, что в моем случае эта ошибка возникла из-за того, что я забыл обновить project.json с помощью
"buildOptions": {
"emitEntryPoint": true
}
Ответ 14
У меня была та же ошибка, о которой идет речь, с теми же проблемами, что описаны VSG24 в предлагаемом ответе - неприятное сообщение об ошибке при вводе "dotnet" в CMD:
Программа не может запускаться из-за отсутствия api-ms-win-crt-runtime-l1-1-0.dll
Я решил это вручную, установив следующие 2 обновления на Windows Server 2012 R2 (и предварительные требования и все связанные с ним обновления) внимательно прочитайте инструкции по установке на веб-сайте Microsoft):
Надеюсь, это поможет кому-то.
Ответ 15
У меня возникла такая же проблема, когда я попытался опубликовать Debug-версию моего веб-приложения. Этот набор файлов не содержал файл web.config
с правильным значением атрибута processPath
.
Я взял этот файл из версии Release, значение было присвоено пути к моему exe файлу.
<aspNetCore processPath=".\My.Web.App.exe" ... />
Ответ 16
В моем случае была проблема с версией Net Core, установленной на сервере.
Я просто устанавливаю ту же версию, что и на моей машине разработки, и все в порядке: -)
Ответ 17
Я получал HTTP-ошибку 502.5 при попытке опубликовать свой API.NET Core 2.0 API AWS EB и решил его, добавив следующий код в.csproj:
<PropertyGroup>
<PublishWithAspNetCoreTargetManifest>false</PublishWithAspNetCoreTargetManifest>
</PropertyGroup>
Ответ 18
В моем случае после установки AspNetCore.2.0.6.RuntimePackageStore_x64.exe
и DotNetCore.2.0.6-WindowsHosting.exe
мне нужно перезагрузить сервер, чтобы он работал без 502 ошибок шлюза и прокси.
ОБНОВИТЬ:
Существует способ, которым вы можете использовать его без перезагрузки: fooobar.com/questions/6651325/...
Ответ 19
Мне нужно было установить последнюю версию.net Core, найденную здесь. Нет необходимости перезапускать сайт или сервер
Ответ 20
Я решил это, добавив "разрешение на редактирование" к приложению сайта, сопоставленный с физическим каталогом, а затем выбрал пользователя Windows, у которого мог быть доступ к этой корневой папке. (частная сеть).
Ответ 21
Для меня это было вызвано наличием разных версий .Net Core. Я сопоставил свой dev и рабочий сервер, и это сработало.
Ответ 22
У меня была и эта проблема (ошибка произошла как на VS 15, так и на 17). Однако на VS15 он возвратил ошибку CONNECTION_REFUSED
, а на VS17 он возвратил ASP.NET Core 1.0 on IIS error 502.5
.
FIX
Ответ 23
Вот что я понял, и это произошло недавно в Windows 10 после того, как было установлено обновление. Из того, что я собрал, было установлено обновление Защитника Windows, которое предположило, что мой "Project.dll" (основной проект asp.net) вел себя как вирус, поэтому он был удален.
Итак, одна из первых вещей, которые я предлагаю вам сделать, прежде чем вы начнете установку/удаление продуктов, - это проверить на подтверждение, что ваш файл Project.dll находится там, где он должен быть.
Скопируйте его обратно в местоположение, если его больше нет.
Если вы имеете трудности с копированием файла, добавьте исключение в папку проекта в защитнике Windows. (Узнайте, как это сделать здесь.)
Это сработало для меня мгновенно, и я повторил его через несколько серверов.
Ответ 24
Для меня это было то, что connectionString в Startup.cs был пустым в:
services.AddDbContext<ApplicationDbContext>(options => options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
и оно было нулевым, потому что приложение не искало appsettings.json для строки подключения.
Применить Program.cs к:
public static void Main(string[] args)
{
BuildWebHost(args).Run();
}
public static IWebHost BuildWebHost(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.ConfigureAppConfiguration((context, builder) => builder.SetBasePath(context.HostingEnvironment.ContentRootPath)
.AddJsonFile("appsettings.json").Build())
.UseStartup<Startup>().Build();
Ответ 25
Я понятия не имею, почему это сработало для меня, но я использую Windows Authentication, и у меня был этот бит кода на моем BuildWebHost
в Program.cs
:
.UseStartup<Startup>()
.UseHttpSys(options =>
{
options.Authentication.Schemes =
AuthenticationSchemes.NTLM | AuthenticationSchemes.Negotiate;
options.Authentication.AllowAnonymous = false;
})
.Build();
После удаления бит .UserHttpSys
он теперь работает, и я все еще могу аутентифицироваться как пользователь домена.
BuildWebHost
теперь выглядит
public static IWebHost BuildWebHost(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>()
.Build();
Ответ 26
Я получал ту же ошибку и выяснил, что проблема заключалась в том, что во время публикации в Azure мой файл web.config был изменен, так что следующая строка закончилась следующим образом:
<aspNetCore processPath="bin\IISSupport\VSIISExeLauncher.exe" arguments="-argFile IISExeLauncherArgs.txt" forwardWindowsAuthToken="false" stdoutLogEnabled="false" startupTimeLimit="3600" requestTimeout="23:00:00" />
Проблема для Production - это содержимое аргументов: "-argFile IISExeLauncherArgs.txt"
Похоже, эта проблема будет рассмотрена в следующем.NET Core SDK (в настоящее время в предварительном просмотре), но на данный момент обходным путем является добавление этого блока в файл.csproj:
<Target Name="bug_242_workaround" AfterTargets="_TransformWebConfig">
<Exec Command="powershell "(Get-Content '$(PublishDir)Web.config').replace(' -argFile IISExeLauncherArgs.txt', '') | Set-Content '$(PublishDir)Web.config'"" />
</Target>
Это изменит файл web.config и удалит проблемную часть для публикации.
Ссылка: https://github.com/aspnet/websdk/issues/242
Надеюсь, поможет.
Ответ 27
Работала для меня после изменения конфигурации публикации.
![enter image description here]()
Ответ 28
У меня была аналогичная проблема (Asp.Net Core 2.x), которая была вызвана попыткой запуска 32-разрядного основного приложения asp.net в IIS на 64-битном сервере Windows. Основная причина заключалась в том, что автоматически созданный web.config (если ваш проект явно не включает один, какие проекты по умолчанию для asp.net не по умолчанию) не содержит полного пути к исполняемому файлу dotnet. Когда вы устанавливаете пакет хостинга на 64-битной машине, он установит 64-разрядные версии dotnet, а путь по умолчанию будет 64 бит, а 32-разрядное базовое приложение asp.net не сможет загрузиться. В вашем браузере вы можете увидеть ошибку 502.5, и если вы посмотрите журнал событий сервера, вы можете увидеть код ошибки 0x80004005. Если вы попытаетесь запустить dotnet.exe из командной строки, чтобы загрузить вашу DLL-приложение основного приложения asp.net на этом сервере, вы можете увидеть ошибку, например "BadImageFormatException" или "попытка загрузить программу с неправильным форматом". Исправление, которое сработало для меня, заключалось в том, чтобы добавить файл web.config в мой проект (и развертывание), а в этом web.config установить полный путь к 32-разрядной версии dotnet.exe.
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<location path="." inheritInChildApplications="false">
<system.webServer>
<handlers>
<add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified" />
</handlers>
<aspNetCore processPath="C:\Program Files (x86)\dotnet\dotnet.exe" arguments=".\My32BitAspNetCoreApp.dll" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" />
</system.webServer>
</location>
</configuration>
Ответ 29
Откройте командную строку с учетными данными администратора
Введите следующую команду и нажмите Enter
> IISRESET
ИЛИ ЖЕ
Откройте Visual Studio 2017 с учетными данными администратора
Введите следующую команду в консоли диспетчера пакетов и нажмите Enter
PM> IISRESET
PM> IISRESET
Attempting stop...
Internet services successfully stopped
Attempting start...
Internet services successfully restarted
Ответ 30
У меня возникла та же проблема, и причина в моем случае заключалась в том, что ядро EF пыталось прочитать строку подключения из файла appsettings.development.json
. Я открыл его и обнаружил, что строка подключения была прокомментирована.
//{
// "ConnectionStrings": {
// "DefaultConnection": "Server=vaio;Database=Goldentaurus;Trusted_Connection=True;",
// "IdentityConnection": "Server=vaio;Database=GTIdentity;Trusted_Connection=True;"
// }
//}
Затем я снял их, как показано ниже, и проблема решена:
{
"ConnectionStrings": {
"DefaultConnection": "Server=vaio;Database=Goldentaurus;Trusted_Connection=True;",
"IdentityConnection": "Server=vaio;Database=GTIdentity;Trusted_Connection=True;"
}
}