Как установить приложение ASP.Net MVC на IIS 7 с помощью Wix?

Для IIS6 я могу использовать помощники IIS в Wix для установки веб-приложения следующим образом:

<iis:WebAppPool 
    Id="AP_MyApp" 
    Name="My Application Pool" 
    Identity="networkService" />
<iis:WebApplication 
    Id="WA_MyApp" 
    Name="MyApp" 
    WebAppPool="AP_MyApp">
    <iis:WebApplicationExtension
        CheckPath="no"
        Executable="[NETFRAMEWORK20INSTALLROOTDIR]aspnet_isapi.dll"
        Verbs="GET,HEAD,POST"/>
</iis:WebApplication>

К сожалению, это не работает для IIS7. Мы не хотим использовать механизм aspnet_isapi.dll и вместо этого хотим, чтобы интегрированный конвейер обрабатывал маршрутизацию запроса. Пул приложений, созданный этим script, находится в режиме классического режима, а не в интегрированном режиме, поэтому никто из обработчиков не запускается правильно.

Как правильно установить приложение MVC в IIS 7?

Ответы

Ответ 1

Расширения IIS для WIX не поддерживают IIS7. Команда IIS продолжает переписывать метабазу между версиями. Существует немало вещей, которые не работают, отсутствие интегрированного пула приложений среди них.

До тех пор, пока расширения не будут перезаписаны, у вас останется три варианта:

  • Использовать сборку в пользовательских действиях для вызова appcmd.exe
  • Использовать XmlConfig для обновления applicationHost.config
  • Напишите свои собственные действия

Я выбрал вариант xmlconfig на данный момент, так как вы можете сделать это внутри компонента и привязать его к функции.

Ответ 2

Я лично рекомендую использовать AppCmd.exe(matthewthurlow first bullet), потому что вам не нужно рассчитывать на устаревшие компоненты управления, которые вы устанавливаете, или можете вручную изменить конфигурацию XML.

Если вам не нравится AppCmd, у Майка Володарского есть отличная статья о Начало работы с AppCmd.exe и Microsoft Ссылка на IIS Configuration превосходна, предлагая примеры интерфейса, кода и AppCmd ​​для изменения каждого из элементов конфигурации (например, Пулы приложений). Пакет администрирования IIS7 также включает Редактор конфигурации, который позволяет генерировать AppCmd ​​ из любой существующей конфигурации.

Чтобы интегрировать AppCmd ​​в WiX, вам нужно создать и запланировать два пользовательских действия для каждой команды. В руководстве по WiX v3 есть общая информация документирующая эту процедуру, и я привел конкретный пример ниже.

Сначала вам нужно настроить немедленное действие для сохранения командной строки в свойстве:

<CustomAction 
  Id="CreateAppPool_Cmd" 
  Property="CreateAppPool" 
  Execute="immediate" 
  Value="&quot;[WindowsFolder]system32\inetsrv\APPCMD.EXE&quot; add apppool /name:&quot;[APP_POOL_NAME]&quot;" /> 

Затем вы устанавливаете отложенное действие, которое ссылается на это свойство:

<CustomAction 
  Id="CreateAppPool" 
  BinaryKey="WixCA" 
  DllEntry="CAQuietExec" 
  Execute="deferred" 
  Return="ignore" 
  Impersonate="no"/> 

И, наконец, вам нужно запланировать их. Непосредственное действие, которое устанавливает свойства, похоже, хорошо работает после InstallFinalize, а отложенное действие работает после InstallFiles. Пока я еще не выяснил действия отката.

MapGuide Open Source делает этот метод широко; вы можете увидеть планирование CA в нашем MapGuide.wxs файле, а определение CA в нашем IIS7.wxs.

Ответ 3

Благодаря @matthewthurlow, я смог использовать утилиты XML для достижения того, что мне нужно было сделать:

<util:XmlFile 
    Id="ModifyAppPoolPipelineType"
    Action="setValue"
    ElementPath="//configuration/system.applicationHost/applicationPools/add[\[]@name='My Application Pool'[\]]/@managedPipelineMode"
    File="[WindowsFolder]System32\inetsrv\config\applicationHost.config"
    Value="Integrated"/>

Остальные действия, похоже, отлично работают с IIS 7.