Ошибка 500.30 после изменения целевой платформы с x64 на x86 в проекте API веб-сервера в Visual Studio 2022

Я создал новый проект API веб-сервера в Visual Studio 2022, используя .NET 8.0. Автоматически генерируется контроллер WeatherForecast. После компиляции и публикации без внесения каких-либо изменений я настроил проект на IIS, и все работает нормально.

Позже я изменил целевую платформу на x86.

Я скомпилировал и опубликовал снова, не получив никаких ошибок. Я также попытался установить цель времени выполнения на x86 и x64.

Однако после настройки проекта в IIS я получаю ошибку 500.30 при попытке доступа к созданному контроллеру.

Когда я запускаю проект в режиме отладки/выпуска непосредственно из Visual Studio, все работает нормально.

После включения ведения журнала я получаю эту ошибку:

Журнал событий: «Приложение «/LM/W3SVC/3/ROOT» с физическим корнем «C:\inetpub\wwwroot\restapi» столкнулось с непредвиденным управляемым исключением, код исключения = «0xe0434352». Пожалуйста, проверьте журналы stderr для получения дополнительной информации». Сообщение о завершении журнала событий.

Может ли кто-нибудь помочь мне решить эту проблему? Спасибо заранее за любые предложения.

Вы пытались изменить пул приложений для работы в 32-разрядной версии?

Lex Li 15.04.2024 17:32

'спасибо большое, именно в этом и была проблема

frankborty 15.04.2024 18:20
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
2
77
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Я предлагаю вам взглянуть на программу просмотра событий, чтобы попытаться определить точную причину. Ошибка HTTP 500 вызвана исключением во время выполнения. Так что причин может быть много. Иногда вам нужно просмотреть 2 или 3 события до и 2 или 3 события после.

По порядку я бы поискал:

  • Время выполнения. Хорошо ли он настроен на сервере. Вам необходимо установить пучок (https://dotnet.microsoft.com/en-us/download/dotnet/thank-you/runtime-aspnetcore-8.0.4-windows-hosting-bundle-installer)
  • Необходимые библиотеки. Если вы опубликовали приложение, все находится в папке bin\publish.
  • Разрешения, которые затрагиваются для папки. Для уверенности вы можете добавить «Все» в список авторизованных пользователей и предоставить разрешение на чтение/запись. Если проблема решена, вам придется предоставить точные разрешения, которые определяются пулом приложений, обслуживающим этот веб-сайт.

Кроме того, если вы не нашли на этом этапе, вы можете запустить .exe-файл вашего приложения вместо IIS, который будет запускаться в консоли и показывать вам исключения, если таковые имеются. Вы должны остановить веб-сайт перед запуском exe.

Удачи.

Хотя причин 500.30 может быть несколько, сам этот вопрос ясно указывает на реальную причину — несоответствие разрядности.

Lex Li 15.04.2024 18:31
Ответ принят как подходящий

Разверните немного мой комментарий.

Вероятно, вы уже знаете, что ASP.NET Core по умолчанию использует внутрипроцессный режим размещения. IIS по умолчанию создает 64-битные рабочие процессы (w3wp.exe), которые, в свою очередь, загружают 64-битный модуль ASP.NET Core (ANCM, он же aspnetcorev2.dll).

ANCM без проблем загружает любые биты CPU/x64, поскольку разрядность совпадает. Однако вы намеренно изменили свои артефакты на 32-битные, которые невозможно загрузить в 64-битных процессах. Это причина ошибки 500.30.

Обычно нет причин переключаться на 32-битную версию, но если у вас есть необходимость, вам также придется изменить пул приложений IIS для работы в 32-битном режиме, чтобы он создавал 32-битный рабочий процесс с 32-битным ANCM. Вот как вы обнаружили, что ошибка устранена.

Прекрасное объяснение, спасибо. Мне нужно работать на 32-битной версии, потому что мне нужно использовать 32-битную dll. Чтобы решить проблему, мне достаточно было включить 32-битные приложения для пользователя в пуле. Например, как показано в этом руководстве aspsnippets.com/Articles/1467/…

frankborty 15.04.2024 19:08

Другие вопросы по теме