2009-03-26 12 views
15

Para IIS6 puedo usar los ayudantes de IIS en Wix para instalar una aplicación web como esta:¿Cómo instalo una aplicación ASP.Net MVC en IIS 7 usando 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> 

Desafortunadamente, esto no funciona para IIS7. No queremos utilizar el mecanismo aspnet_isapi.dll y, en su lugar, deseamos que la interconexión integrada gestione el enrutamiento de solicitudes. El grupo de aplicaciones creado por este script está en modo Clásico, no en modo Integrado, por lo que ninguno de los controladores se ejecuta correctamente.

¿Cómo puedo instalar correctamente una aplicación MVC en IIS 7?

+0

Bueno, desafortunadamente las extensiones de IIS aún no son compatibles con IIS7. – alexn

Respuesta

2

Las extensiones de IIS para WIX no son compatibles con IIS7. El equipo de IIS sigue reescribiendo la metabase entre versiones. Hay bastantes cosas que no funcionan, la falta de un grupo de aplicaciones integrado entre ellas.

Hasta las extensiones consiguen reescritos, uno se queda con tres opciones:

  • Uso construir en acciones personalizadas para invocar appcmd.exe
  • Uso XMLConfig para actualizar applicationHost.config
  • Escriba su propia acciones personalizadas

He optado por la opción xmlconfig por el momento, ya que puede hacerlo dentro de un componente y vincularlo a una función.

+0

Eso no es exactamente cierto. Mike ha trabajado mucho para que IIS7 sea compatible con las CustomActions existentes. Desafortunadamente, el código solo admite el material "heredado". Como se señaló anteriormente, la tubería integrada necesita un código personalizado. –

+1

OK - No sabía que se estaba haciendo un trabajo para admitir IIS7 - Vi un comentario que sugería que el soporte de Apache podría llegar antes: p Tenía la impresión de que algunas cosas funcionaban si cambiabas la compatibilidad de la metabase de IIS6 y eso era todo . Es bueno escucharlo. – matthewthurlow

+1

Para ser claros, aún necesita la compatibilidad de la metabase IIS6 pero, al menos, debería funcionar. Y ese fue mi comentario ocasional cuando estaba enojado con IIS. –

4

Gracias a @matthewthurlow, yo era capaz de utilizar las utilidades XML para lograr lo que tenía que hacer:

<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"/> 

El resto de las acciones parecen funcionar bien con IIS 7.

+2

¿Al desinstalar cómo saca la entrada? – CheGueVerra

11

Personalmente, recomiendo usar AppCmd.exe (la primera viñeta de matthewthurlow) porque no tiene que contar con los componentes de administración heredados que se están instalando, o corre el riesgo de modificar el XML de configuración manualmente.

Si no se siente cómodo con appcmd, Mike Volodarski tiene un gran artículo sobre Getting Started with AppCmd.exe, y el Microsoft IIS Configuration Reference es excelente, ofreciendo la interfaz de usuario, el código y appcmd ejemplos de modificación de cada uno de los elementos de configuración (por ejemplo Application Pools). El IIS7 Administration Pack también incluye un Editor de configuración que le permite generate AppCmd scripts desde cualquier configuración existente.

Para integrar AppCmd ​​en WiX, debe crear y programar dos acciones personalizadas para cada comando. Hay información general en el manual de WiX v3 documenting this procedure, y he incluido un ejemplo concreto a continuación.

En primer lugar, es necesario configurar una acción inmediata para almacenar la línea de comandos en una propiedad:

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

A continuación se configura una acción diferida que hace referencia a esta propiedad:

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

Y finalmente, necesitas programar estos. La acción inmediata que establece las propiedades parece funcionar bien después de InstallFinalize, y la acción diferida funciona después de InstallFiles. Aún no he llegado a deducir las acciones de reversión.

MapGuide Código abierto hace este método ampliamente; Puede ver la programación de CA en nuestro archivo MapGuide.wxs y la definición de CA en nuestro archivo IIS7.wxs.

+0

Gracias por la buena información Jason! – si618

+0

Esto fue muy útil ayer, ¡y gracias por los enlaces a los ejemplos también! –

Cuestiones relacionadas