Configurar las propiedades de implementación de un entorno de destino

por Jason Lee

En este tema se describe cómo configurar propiedades específicas del entorno para implementar la solución de administrador de contactos de muestra en un entorno de destino específico.

Este tema forma parte de una serie de tutoriales basados en los requisitos de implementación empresarial de una empresa ficticia denominada Fabrikam, Inc. Esta serie de tutoriales utiliza una solución de muestra — la solución Contact Manager— para representar una aplicación web con un nivel de complejidad realista, que incluye una aplicación ASP.NET MVC 3, un servicio Windows Communication Foundation (WCF) y un proyecto de base de datos.

El método de implementación que constituye el núcleo de estos tutoriales se basa en el enfoque del archivo de proyecto dividido descrito en Comprensión del proceso de compilación, en el que el proceso de compilación está controlado por dos archivos de proyecto: uno que contiene las instrucciones de compilación que se aplican a todos los entornos de destino y otro que contiene los ajustes de compilación e implementación específicos del entorno. En tiempo de compilación, el archivo de proyecto específico del entorno se combina en el archivo de proyecto independiente del entorno para formar un conjunto completo de instrucciones de compilación.

Información general del proceso

El archivo de proyecto que usará para compilar e implementar la solución Contact Manager se divide en dos archivos físicos:

  • Uno que contiene la configuración de compilación universal y las instrucciones (el archivo Publish.proj ).
  • Uno que contiene la configuración de compilación específica del entorno (Env-Dev.proj,Env-Stage.proj, etc.).

En tiempo de compilación, el archivo de proyecto específico del entorno adecuado se combina en el archivo Publish.proj universal para formar un conjunto completo de instrucciones de compilación. Puede configurar la implementación en entornos de destino específicos mediante la creación o personalización de archivos de proyecto específicos del entorno con la configuración que describe su propio escenario de implementación.

Muchos de estos valores se determinan mediante la configuración del entorno de destino, en particular, si el servidor Web de destino está configurado para usar el servicio Web Deployment Agent (el agente remoto) o el controlador de Web Deploy. Para obtener más información sobre estos enfoques y para obtener instrucciones sobre cómo elegir el enfoque adecuado para su propio entorno, consulte Elegir el enfoque adecuado para la implementación web.

El escenario de Contact Manager requiere dos archivos de proyecto específicos del entorno:

  • Implementación en un entorno de prueba para desarrolladores (Env-Dev.proj). El entorno de prueba del desarrollador está configurado para aceptar implementaciones remotas mediante el agente remoto, como se describe en Escenario: Configuración de un entorno de prueba para la implementación web. Este archivo debe proporcionar la dirección del punto de conexión del agente remoto, así como la configuración específica de la ubicación, como las cadenas de conexión y los puntos de conexión de servicio.
  • Implementación en un entorno de ensayo (Env-Stage.proj). El entorno de ensayo está configurado para aceptar implementaciones remotas mediante el controlador de Web Deploy, como se describe en Escenario: Configuración de un entorno de ensayo para la implementación web. Este archivo debe proporcionar la dirección del punto de conexión del controlador de Web Deploy, así como la configuración específica de la ubicación, como las cadenas de conexión y los puntos de conexión de servicio.

Es importante tener en cuenta que la configuración que configure en el archivo de proyecto específico del entorno no afecta al contenido del propio paquete web; en su lugar, controlan cómo se implementa el paquete y qué valores de parámetro se proporcionan cuando se extrae el paquete. Va a importar manualmente el paquete web en el entorno de producción, como se describe en Escenario: Configuración de un entorno de producción para la implementación web y Instalación manual de paquetes web, por lo que no importa qué configuración usó en el archivo de proyecto específico del entorno cuando generó el paquete. El Administrador de Internet Information Services (IIS) le pedirá cualquier valor parametrizado, como cadenas de conexión y puntos de conexión de servicio, al importar el paquete.

Para implementar la solución Contact Manager en su propio entorno de destino, puede personalizar este archivo o usarlo como plantilla y crear su propio archivo.

Para configurar opciones de implementación específicas del entorno para la solución Contact Manager

  1. Abra la solución ContactManager-WCF en Visual Studio 2010.

  2. En la ventana Explorador de soluciones, expanda la carpeta Publicar, expanda la carpeta EnvConfig y, a continuación, haga doble clic en Env-Dev.proj.

    In the Solution Explorer window, expand the Publish folder, expand the EnvConfig folder, and then double-click Env-Dev.proj.

  3. Reemplace los valores de propiedad del archivo env-Dev.proj por los valores correctos para su propio entorno de prueba.

    Nota:

    La tabla siguiente a este procedimiento proporciona más información sobre cada una de estas propiedades.

  4. Guarde el trabajo y cierre el archivo Env-Dev.proj.

Elección de las propiedades de implementación adecuadas

En esta tabla se describe el propósito de cada propiedad en el archivo de proyecto específico del entorno de ejemplo, Env-Dev.projy se proporcionan algunas instrucciones sobre los valores que debe proporcionar.

Nombre de propiedad Detalles
MSDeployComputerName Es el nombre del servidor web de destino o el punto de conexión de servicio. Si va a implementar en el servicio del agente remoto en el servidor web de destino, puede especificar el nombre del equipo de destino (por ejemplo, TESTWEB1 o TESTWEB1.fabrikam.net), o puede especificar el punto de conexión del agente remoto (por ejemplo, http://TESTWEB1/MSDEPLOYAGENTSERVICE). La implementación funciona de la misma manera en cada caso. Si va a implementar en el controlador de Web Deploy en el servidor web de destino, debe especificar el punto de conexión de servicio e incluir el nombre del sitio web de IIS como parámetro de cadena de consulta (por ejemplo, https://STAGEWEB1:8172/MSDeploy.axd?site=DemoSite).
MSDeployAuth El método que Web Deploy debe usar para autenticarse en el proceso remoto. Debe establecerse en NTLM o Básico. Normalmente, usará NTLM si va a implementar en el servicio de agente remoto y Básico si va a implementar en el controlador de Web Deploy. Si usa la autenticación básica, también debe especificar el nombre de usuario y la contraseña que la herramienta de implementación web (Web Deploy) de IIS debe suplantar para realizar la implementación. En este ejemplo, estos valores se proporcionan a través de las propiedades MSDeployUsername y MSDeployPassword. Si usa la autenticación NTLM, puede omitir estas propiedades o dejarlas en blanco.
MSDeployUsername Si usa la autenticación básica, Web Deploy usará esta cuenta en el equipo remoto. Esto debe tener el formato DOMINIO*nombre de usuario* (por ejemplo, FABRIKAM\matt). Este valor solo se usa si especifica la autenticación básica. Si usa la autenticación NTLM, se puede omitir la propiedad. Si se proporciona un valor, se omitirá.
MSDeployPassword Si usa la autenticación básica, Web Deploy usará esta contraseña en el equipo remoto. Esta es la contraseña de la cuenta de usuario que especificó en la propiedad MSDeployUsername. Este valor solo se usa si especifica la autenticación básica. Si usa la autenticación NTLM, se puede omitir la propiedad. Si se proporciona un valor, se omitirá.
ContactManagerIisPath La ruta de acceso de IIS en la que desea implementar la aplicación MVC de Contact Manager. Debe ser la ruta de acceso tal como aparece en el Administrador de IIS, en el formulario [nombre del sitio web de IIS]/[nombre de aplicación web]. Recuerde que el sitio web de IIS debe existir antes de implementar la aplicación. Por ejemplo, si ha creado un sitio web de IIS denominado DemoSite, puede especificar la ruta de acceso de IIS para la aplicación MVC como DemoSite/ContactManager.
ContactManagerServiceIisPath La ruta de acceso de IIS en la que desea implementar el servicio WCF del Administrador de contactos. Por ejemplo, si ha creado un sitio web de IIS denominado DemoSite, puede especificar la ruta de acceso de IIS para el servicio WCF como DemoSite/ContactManagerService.
ContactManagerTargetUrl La dirección URL a la que se puede acceder al servicio WCF. Esto tendrá el formato [dirección URL raíz del sitio web de IIS]/[nombre de aplicación de servicio]/[punto de conexión de servicio]. Por ejemplo, si ha creado un sitio web de IIS en el puerto 85, la dirección URL tomará el formato http://localhost:85/ContactManagerService/ContactService.svc. Recuerde que la aplicación MVC y el servicio WCF se implementan en el mismo servidor. Como resultado, solo se accede a esta dirección URL desde la máquina en el que está instalado. Por este motivo, es mejor usar localhost o la dirección IP, en lugar del nombre del equipo o un encabezado de host, en la dirección URL. Si usa el nombre del equipo o un encabezado de host, la comprobación de bucle invertido característica de seguridad en IIS puede bloquear la dirección URL y devolver un error de HTTP 401.1 - No autorizado.
CmDatabaseConnectionString La cadena de conexión para el servidor de bases de datos. La cadena de conexión determina las credenciales que VSDBCMD usará para ponerse en contacto con el servidor de bases de datos y crear la base de datos y las credenciales que usará el grupo de aplicaciones del servidor web para ponerse en contacto con el servidor de bases de datos e interactuar con la base de datos. Básicamente tiene dos opciones aquí. Puede especificar Integrated Security=true, en cuyo caso se usa la autenticación integrada de Windows: Data Source=TESTDB1; Integrated Security=true En este caso, la base de datos se creará con las credenciales del usuario que ejecuta el ejecutable VSDBCMD y la aplicación tendrá acceso a la base de datos mediante la identidad de la cuenta de máquina del servidor web. Como alternativa, puede especificar el nombre de usuario y la contraseña de una cuenta de SQL Server. En este caso, VSDBCMD usa las credenciales de SQL Server para crear la base de datos y el grupo de aplicaciones para interactuar con la base de datos: Origen de datos=TESTDB1;User Id=ASqlUser; Password=Pa$$w0rd Los tutoriales de este tema suponen que usará la autenticación integrada de Windows.
CmTargetDatabase El nombre que desea asignar a la base de datos que va a crear en el servidor de bases de datos. El valor que proporcione aquí se agrega al comando VSDBCMD como parámetro. También se usa para compilar una cadena de conexión completa que el grupo de aplicaciones del servidor web puede usar para interactuar con la base de datos.

Estos ejemplos muestran cómo configurar estas propiedades para escenarios de implementación específicos.

Ejemplo 1—Implementación en el servicio agente remoto

En este ejemplo:

  • Va a implementar en el servicio de agente remoto en TESTWEB1.
  • Le indica a Web Deploy que use la autenticación NTLM. Web Deploy se ejecutará con las credenciales que usó para invocar Microsoft Build Engine (MSBuild).
  • Está usando la autenticación integrada para implementar la base de datos de ContactManager en TESTDB1. La base de datos se implementará con las credenciales que usó para invocar MSBuild.
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>    
    <MSDeployComputerName Condition=" '$(MSDeployComputerName)'=='' ">
      TESTWEB1.fabrikam.net
    </MSDeployComputerName>
    <MSDeployAuth Condition=" '$(MSDeployAuth)'=='' ">NTLM</MSDeployAuth>
    <ContactManagerTargetUrl Condition =" '$(ContactManagerTargetUrl)'=='' ">
      http://localhost:85/ContactManagerService/ContactService.svc
    </ContactManagerTargetUrl>
    <ContactManagerIisPath Condition=" '$(ContactManagerIisPath)'=='' ">
      DemoSite/ContactManager
    </ContactManagerIisPath>
    <ContactManagerServiceIisPath 
      Condition=" '$(ContactManagerServiceIisPath)'=='' ">
        DemoSite/ContactManagerService
    </ContactManagerServiceIisPath>
    <CmDatabaseConnectionString Condition=" '$(CmDatabaseConnectionString)'=='' ">
      Data Source=TESTDB1;Integrated Security=true</CmDatabaseConnectionString>
    <CmTargetDatabase Condition=" '$(CmTargetDatabase)'=='' ">
      ContactManager
    </CmTargetDatabase>
  </PropertyGroup>  
</Project>

Ejemplo 2—Implementación en el punto de conexión del controlador de Web Deploy

En este ejemplo:

  • Va a implementar en el punto de conexión de servicio controlador de Web Deploy en STAGEWEB1.
  • Le indica a Web Deploy que use la autenticación básica.
  • Está especificando que Web Deploy debe suplantar la cuenta FABRIKAM\stagingdeployer en el equipo remoto.
  • Está usando la autenticación de SQL Server para implementar la base de datos de ContactManager en STAGEDB1.
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>    
    <MSDeployComputerName Condition=" '$(MSDeployComputerName)'=='' ">
      https://STAGEWEB1:8172/MSDeploy.axd?site=DemoSite
    </MSDeployComputerName>
    <MSDeployAuth Condition=" '$(MSDeployAuth)'=='' ">Basic</MSDeployAuth>
    <MSDeployUsername Condition=" '$(MSDeployUsername)'=='' ">
      FABRIKAM\stagingdeployer
    </MSDeployUsername>
    <MSDeployPassword Condition=" '$(MSDeployPassword)'=='' ">
      Pa$$w0rd
    </MSDeployPassword>
    <ContactManagerTargetUrl Condition =" '$(ContactManagerTargetUrl)'=='' ">
      http://localhost:85/ContactManagerService/ContactService.svc
    </ContactManagerTargetUrl>
    <ContactManagerIisPath Condition=" '$(ContactManagerIisPath)'=='' ">
      DemoSite/ContactManager
    </ContactManagerIisPath>
    <ContactManagerServiceIisPath 
      Condition=" '$(ContactManagerServiceIisPath)'=='' ">
        DemoSite/ContactManagerService
    </ContactManagerServiceIisPath>
    <CmDatabaseConnectionString Condition=" '$(CmDatabaseConnectionString)'=='' ">
      Data Source=STAGEDB1;User ID=sa;'$($CREDENTIAL_PLACEHOLDER$)'
    </CmDatabaseConnectionString>
    <CmTargetDatabase Condition=" '$(CmTargetDatabase)'=='' ">
      ContactManager
    </CmTargetDatabase>
  </PropertyGroup>  
</Project>

Conclusión

En este punto, los archivos del proyecto están totalmente configurados para compilar e implementar la solución Contact Manager en uno o varios entornos de destino.

Para usar estos archivos de proyecto como parte de un proceso de implementación repetible de un solo paso, debe ejecutar el archivo publish.proj mediante MSBuild y pasar la ubicación del archivo de proyecto específico del entorno como parámetro. Puede hacerlo de varias maneras: