Как установить приложение ASP.Net MVC на IIS 7 с помощью Wix? - PullRequest
15 голосов
/ 26 марта 2009

Для 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, а хотим, чтобы интегрированный конвейер обрабатывал маршрутизацию запросов. Пул приложений, созданный этим сценарием, находится в классическом режиме, а не в интегрированном, поэтому ни один из обработчиков не запускается правильно.

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

Ответы [ 3 ]

11 голосов
/ 02 мая 2009

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

Если вам не нравится AppCmd, у Майка Володарского есть отличная статья на Начало работы с AppCmd.exe , а справочник по настройке IIS Microsoft превосходен, предлагая пользовательский интерфейс, код и примеры 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 .

4 голосов
/ 27 марта 2009

Благодаря @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.

2 голосов
/ 27 марта 2009

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

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

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

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

...