visual-studio - tutorial - visual studio code extensions
¿Cómo controlo el AppPool utilizado para la implementación a través de la configuración de VS y MSDeploy? (2)
Cuando compilo un paquete de implementación para mi aplicación web, el paquete contiene un archivo archive.xml que contiene lo siguiente:
<createApp
applicationPool=""
MSDeploy.applicationPool="1"
appExists="True"
MSDeploy.appExists="1"
... />
Pregunta:
¿Cómo puedo controlar el grupo de aplicaciones en el que se instala la aplicación web y, en algunos casos, crear un nuevo grupo de aplicaciones? ¿Hay alguna configuración de VS que pueda cambiar para controlar la salida anterior o que afecte de alguna manera la forma en que el grupo de aplicaciones implementa?
Lo que he encontrado hasta ahora:
1. Un parámetro de MSBuild
De acuerdo con una publicación SO , puedo decirle a msbuild que use un grupo de aplicaciones agregando la siguiente opción pero no pude ver ninguna diferencia en el resultado generado:
/p:IncludeAppPool=true
2. Una parametrización del archivo parameters.xml.
Otra publicación sobre la configuración del grupo de aplicaciones para msdeploy parece implicar que podría ser capaz de modificar el archivo parameters.xml
generado para que pueda especificar el nombre del grupo de aplicaciones como un argumento para msdeploy. Este archivo existe dentro del paquete zip, por lo que no sería fácil de personalizar. Si lo cambio a un archivo, entonces el archivo es más fácilmente accesible.
3. Un cambio de configuración de VS
La implementación de una página de aplicación web parece implicar que podría necesitar cambiar de IIS Express a IIS y luego habilitar algunas casillas de verificación. En la página de propiedades de mi proyecto, la casilla de verificación Include application pool settings used by this Web project
está deshabilitada, independientemente de la configuración de la casilla de verificación "Incluir configuración de IIS tal como está configurada en IIS Express" (que actualmente no tengo marcada). Intentaré cambiar al IIS completo a continuación y ver si eso me da un mejor control.
4. Crear un grupo de aplicaciones con cscript
Parece que podría ser capaz de crear un grupo de aplicaciones con una herramienta separada, pero no estoy seguro de que sea solo para TFS. Es una herramienta que no he visto antes, pero puede ser una herramienta capaz.
5. MSDeploy tiene un proveedor appPoolConfig
El proveedor appPoolConfig de MSDeploy parece prometedor ya que probablemente podría configurar manualmente un grupo de aplicaciones y luego usarlo como fuente de sincronización, pero al menos es solo manual una vez.
El problema me encontró cuando estaba implementando en la Web desde Visual Studio 2010 sp1 el servicio c # WCF que estaba creando como se indica en: http://technologyriver.blogspot.fi/2012/02/prerequisites-check-windows-7.html
Recibí el error: Error 1 Error en la tarea de implementación web. (El grupo de aplicaciones que está intentando usar tiene la propiedad ''managedRuntimeVersion'' establecida en ''v2.0''. Esta aplicación requiere ''v4.0''.) 0 0 WcfService3
Como no tengo un IIS completo, pero el IIS Express no puedo ir al administrador. Después de algunas citas con mr. Google y ms. Bing encontré la solución, mirándome fijamente la cara.
La solución es usar el nombre del servicio web explícitamente correcto en lugar del valor predeterminado utilizado en el ejemplo.
Solución: primero abra el archivo de configuración de IIS Express% userprofile% / documents / IISExpress / config / applicationhost.config
Compruebe el sitio predeterminado que tiene allí, en mi caso fue:
<site name="WebSite1" id="1" serverAutoStart="true">
<application path="/" applicationPool="Clr4IntegratedAppPool">
<virtualDirectory path="/" physicalPath="%IIS_SITES_HOME%/WebSite1" />
</application>
<bindings>
<binding protocol="http" bindingInformation=":8080:localhost" />
</bindings>
</site>
Asegúrese de que el grupo de aplicaciones para el sitio sea correcto, en mi caso "Clr4IntegratedAppPool"
En la fase de implementación, tal como se indica en el blog vinculado, se utiliza como Sitio / aplicación algunos "Sitio web predeterminado / MyApp".
Para mí, la configuración correcta, como se ve en la configuración del sitio, sería "WebSite1" y también la url del servicio en el despliegue necesita enlace de puerto y en mi caso sería "localhost: 8080"
Si siente que desea más definición, cree un sitio completamente nuevo con su propio grupo en la configuración y úselo en la implementación. Puede encontrar algunos ejemplos de esa dirección aquí: http://www.philliphaydon.com/2012/06/multiple-iisexpress-sites-profiled-with-dottrace/
Espero que esto ayude a cualquiera de ustedes a evitar las fechas frustrantes con las máquinas de búsqueda.
Saludos cordiales, Petteri Kujala
También estoy empezando a estudiar las posibilidades de cómo lograr esto.
Todavía tengo algunas investigaciones que hacer, pero puedo darte los siguientes consejos:
IncludeAppPool = true habilita AppPoolExtension que también copia el grupo de aplicaciones al sincronizar un sitio web de una ubicación a otra. Supongo que no tendrá efecto al crear un paquete. A menos que tal vez si WAP se ejecuta a través de su IIS local e incluya la configuración de IIS en su paquete.
Parameters.xml existe en el zip de hecho. Pero si coloca un archivo Parameters.xml en la raíz de su WAP, puede especificar sus propios parámetros que se fusionarán con los que VS crea al empaquetar.
De hecho, puede marcar "Incluir la configuración del grupo de aplicaciones utilizada por este proyecto web" (de hecho: esto establece la propiedad msbuild IncludeAppPool en verdadero). El manifiesto contendrá una entrada para crear el grupo de aplicaciones. Sin embargo, esto solo es posible si está creando el paquete desde una máquina que también ejecuta localmente el WAP. Esta no es una opción cuando se trabaja con un servidor de compilación, como es mi caso
Podría ser posible hacer un script por lotes para ejecutar msdeploy desde la línea de comandos y usar el proveedor de AppPool para crear el conjunto de aplicaciones. Aunque esto me parece un poco torpe ya que me gustaría incluir la creación de la agrupación de aplicaciones dentro del manifiesto de mi paquete VS (o servidor de compilación) generado
Ahora mismo estoy investigando si sería posible insertar la aplicación apppoolconfig dentro de mi manifiesto usando un archivo wpp.targets (más información here y here
Podría volver a contactarte si encuentro cómo hacerlo.
Editar:
Descubrí que no hay forma de empaquetar la creación de un nuevo grupo de aplicaciones utilizando el proveedor appPoolConfig. Me vi obligado a escribir mi propio proveedor. Hice eso en base a algunos ejemplos (muy básicos) que encontré y mediante ingeniería inversa a algunos de los proveedores existentes. Lo que básicamente hice fue crear una clase contenedora que llama a c: / windows / system32 / inetsrv / appcmd y expuso esta funcionalidad como un proveedor de MSDeploy. appcmd es una herramienta de línea de comandos para configurar iis, con ella puedes crear agrupaciones de aplicaciones ... Si alguien está interesado, podría compartir algo del código ...
Hola otra edición
Lamento que me haya costado tanto, pero he puesto un poco de mi código en mi AppPoolConfigProvider personalizado en mi skydrive, puedes acceder here desde here O here hay un repo completo para acceder.
Para usar este proveedor, debe colocar su dll compilado en una carpeta de Extensibilidad (debe crearlo usted mismo en "c: / Archivos de programa (x86) / IIS / Microsoft Web Deploy V2 /"). Puedes encontrar más información sobre esto en línea.
Utilizo el proveedor en mi archivo xxx.wpp.targets como este:
<Target Name="AddConfigAppPool" Condition="''$(RunConfigAppPool)''">
<Message Text="Adding configAppPool provider" />
<ItemGroup>
<MsDeploySourceManifest Include="configAppPool">
<path>@(__DefaultDeployEnvironmentSetting->''%(AppPoolName)'')</path><!-- Represents the name of the AppPool, required-->
<managedRuntimeVersion>$(DeployManagedRuntimeVersion)</managedRuntimeVersion>
<managedPipelineMode>$(DeployManagedPipelineMode)</managedPipelineMode>
<processModel_identityType>@(__DefaultDeployEnvironmentSetting->''%(AppPoolIdentyType)'')</processModel_identityType>
<processModel_userName>@(__DefaultDeployEnvironmentSetting->''%(AppPoolUserName)'')</processModel_userName>
<processModel_password>@(__DefaultDeployEnvironmentSetting->''%(AppPoolUserPassword)'')</processModel_password>
<processModel_idleTimeout>00:00:00</processModel_idleTimeout>
<AdditionalProviderSettings>managedRuntimeVersion;managedPipelineMode;processModel_identityType;processModel_userName;processModel_password;processModel_idleTimeout</AdditionalProviderSettings>
<!--Possible additional provider settings: queueLength,autoStart,enable32BitAppOnWin64,managedRuntimeVersion,managedRuntimeLoader,enableConfigurationOverride,managedPipelineMode,CLRConfigFile,passAnonymousToken,startMode,processModel_identityType,processModel_userName,processModel_password,processModel_loadUserProfile,processModel_logonType,processModel_manualGroupMembership,processModel_idleTimeout,processModel_maxProcesses,processModel_shutdownTimeLimit,processModel_startupTimeLimit,processModel_pingingEnabled,processModel_pingInterval,processModel_pingResponseTime,recycling_disallowOverlappingRotation,recycling_disallowRotationOnConfigChange,recycling_logEventOnRecycle,recycling_periodicRestart_memory,recycling_periodicRestart_privateMemory,recycling_periodicRestart_requests,recycling_periodicRestart_time,recycling_periodicRestart_schedule_[value=''timespan'']_value,failure_loadBalancerCapabilities,failure_orphanWorkerProcess,failure_orphanActionExe,failure_orphanActionParams,failure_rapidFailProtection,failure_rapidFailProtectionInterval,failure_rapidFailProtectionMaxCrashes,failure_autoShutdownExe,failure_autoShutdownParams,cpu_limit,cpu_action,cpu_resetInterval,cpu_smpAffinitized,cpu_smpProcessorAffinityMask,cpu_smpProcessorAffinityMask2-->
</MsDeploySourceManifest>
</ItemGroup>
Lo siento, no puedo aprender más sobre esto, pero ha pasado un tiempo desde que escribí este código y simplemente no tengo tiempo. Puede encontrar información en línea sobre la creación de proveedores personalizados. Si tiene preguntas adicionales, intentaré responder cuando tenga tiempo disponible.
Espero que esto ayude