IIS 8.5: Проблема с размещением 32-разрядного веб-сайта ASP.NET MVC5 вместе с 64-разрядным веб-сайтом .netcore2.2 - PullRequest
0 голосов
/ 26 марта 2019

Как видно из заголовка, нам нужно разместить рядом два разных веб-сайта (каждый со своим собственным пулом приложений) в IIS 8.5 Windows Server 2012 с полным обновлением.

Один сайт ASP.NET MVC5 работает в 32-битном режиме, а другой - .netcore2.2 в 64-битном режиме.

.netcore2.2 требует, чтобы AspNetModuleCoreV2.dll был загружен в IIS. Проблема в том, что это приводит к сбою 32-битного веб-сайта при загрузке (503 служба недоступна).

Если мы удалим из ApplicationHost.config 64-битный AspNetModuleCoreV2.dll, указывающий на:

 C:\Program Files\IIS\Asp.Net Core Module\V2\aspnetcorev2.dll
 (or even replace it with the 32bit flavor C:\Program Files (x86)\IIS\Asp.Net Core Module\V2\aspnetcorev2.dll)

тогда 32-битный веб-сайт работает нормально, но это приводит к сбою 64-битного веб-сайта .netcore2.2.

Так как мы можем сделать оба сайта счастливыми под одной крышей IIS8.5? Вещи, которые мы попробовали:

Использование настройки удаления обработчика в файле web.config 32-битного веб-сайта:

<handlers>
   <remove name="AspNetCoreModule" />
   <remove name="AspNetCoreModuleV2" />
</handlers>

К сожалению, это не сработало. По-прежнему получаю 503 (обновление: хорошая идея, плохое исполнение - читайте ниже - мы могли бы обойтись без этого!)

Обновление: Хммм, когда я писал эти две вещи, мы почти сразу вспомнили:

  1. Чтобы удалить модуль, мы должны использовать следующий раздел в Web.config (вместо ):

    < system.webServer >
    
      < modules >
    
        < remove name="AspNetCoreModule" />
    
        < remove name="AspNetCoreModuleV2" />
    
      < /modules>
    
    < system.webServer>
    
  2. По какой-то причине установщик установил модуль AspNetCoreModuleV2 как:

    C: \ Program Files \ IIS \ Asp.Net Core Module \ V2 \ aspnetcorev2.dll

Вместо:

%ProgramFiles%\IIS\Asp.Net Core Module\V2\aspnetcorev2.dll

Переменные среды - это разница, которая может иметь значение, когда дело касается 32-битных сайтов. Собираюсь попробовать вещи.

1 Ответ

0 голосов
/ 26 марта 2019

Оказалось, что виновником действительно было то, что (по какой-то причине) установщик времени выполнения .netcore2.2 решил жестко закодировать путь к «aspnetcorev2.dll» внутри ApplicationHost.config IIS, чтобы он указывал на C: \ ProgramФайлы ...

Как уже говорилось, правильный способ регистрации модуля:

   %ProgramFiles%\IIS\Asp.Net Core Module\V2\aspnetcorev2.dll 

Таким образом, когда сайт работает в 32-битном режиме, он будет загружать правильную версиюdll от:

   C:\Program Files (x86)\IIS\Asp.Net Core Module\V2\aspnetcorev2.dll 

И с этого момента все будет работать.

Если вы хотите использовать его более безопасно при развертывании на клиентских серверах, которые находятся вне вашего контроля, вы можетеВы хотите дополнительно явно удалить все модули aspnetcorev2 в Web.config вашего 32-битного ASP.NET MVC5, например:

      < system.webServer >

        < modules >

          < remove name="AspNetCoreModule" />

          < remove name="AspNetCoreModuleV2" />

        < /modules>

      < system.webServer>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...