Tutorial: Redirigir una aplicación para que apunte a un servicio Web diferente en la instalación
En este tutorial se muestra cómo crear una aplicación web que se pueda redirigir con el fin de que apunte a un servicio Web diferente mediante la propiedad Comportamiento de dirección URL, una clase del instalador y un proyecto de programa de instalación web. Esto resulta útil cuando es necesario apuntar a un servicio Web local durante el desarrollo y se desea utilizar una versión de producción del servicio Web al implementar la aplicación.
Nota
Es posible que su equipo muestre nombres o ubicaciones diferentes para algunos de los elementos de la interfaz de usuario de Visual Studio incluidos en las instrucciones siguientes. La edición de Visual Studio que se tenga y la configuración que se utilice determinan estos elementos. Para obtener más información, vea Valores de configuración de Visual Studio.
Crear el proyecto de aplicación Web
El primer paso consiste en crear un proyecto de aplicación web de ASP.NET que contenga una referencia web a un servicio Web.
Para crear el proyecto
- Cree una aplicación web que incluya una referencia web a un servicio Web. Una referencia web a cualquier servicio Web válido será suficiente para este tutorial.
Agregar una clase del instalador
Las clases del instalador, también llamadas componentes de instalación, son las clases de .NET Framework a las que se invoca como acciones personalizadas durante la instalación. En este caso, agregará un proyecto de bibliotecas de clase a la solución. En ese proyecto de bibliotecas de clase, creará una clase de instalador y reemplazará su método Install, agregando código para modificar el archivo .config de la aplicación Web.
Para crear el proyecto de bibliotecas de clase
En el Explorador de soluciones, haga clic con el botón secundario del mouse en el nodo de la solución, después haga clic en Agregar y, a continuación, en Nuevo proyecto.
En el cuadro de diálogo Agregar nuevo proyecto, en el nodo Visual Basic, seleccione Biblioteca de clases.
Dé al proyecto el nombre InstallerClassLibrary.
Para agregar e implementar una clase del instalador
En el Explorador de soluciones, haga clic con el botón secundario del mouse en el nodo de proyecto de InstallerClassLibrary, después haga clic en Agregar y, a continuación, en Clase.
En el cuadro de diálogo Agregar nuevo elemento, seleccione Clase del instalador y cambie el Nombre a WebServiceInstaller.vb.
Al hacer clic en Agregar, se agregará la clase a su proyecto y se abrirá el diseñador de la clase del instalador.
Haga doble clic en el diseñador para abrir el Editor de código.
En WebServiceInstaller.vb, agregue el código siguiente al final del módulo de la clase del instalador (justo antes de la declaración End Class); este código implementa el método Install:
Public Overrides Sub Install( ByVal stateSaver As System.Collections.IDictionary) ' Gets the parameter passed across in the CustomActionData. Dim install_log As New System.IO.StreamWriter("Installation.log") install_log.AutoFlush = True Try Dim providedName = Me.Context.Parameters.Item("ServerName") Dim svcName = Me.Context.Parameters.Item("ServiceName") install_log.WriteLine("Starting Edit of the config file") If providedName = "" OrElse svcName = "" Then Throw New InstallException("No arguments specified") End If ' Uses reflection to find the location of the config file. Dim strConfigLoc = System.Reflection.Assembly.GetExecutingAssembly().Location Dim strTemp = strConfigLoc strTemp = strTemp.Remove(strTemp.LastIndexOf("\"), Len(strTemp) - strTemp.LastIndexOf("\")) strTemp = strTemp.Remove(strTemp.LastIndexOf("\"), Len(strTemp) - strTemp.LastIndexOf("\")) Dim fInfo As New System.IO.FileInfo(strTemp & "\web.config") install_log.WriteLine("File info: " & strTemp) If Not fInfo.Exists Then Throw New InstallException("Missing config file") End If ' Loads the config file into the XML DOM. ' Loads the config file into the XML DOM. Dim xmlDoc = XDocument.Load(fInfo.FullName) ' Finds the right node and change it to the new value. Dim foundIt As Boolean = False For Each node In xmlDoc.<configuration>.<appSettings>.<add> If node.@key = "servername.service" Then ' Note that "Service1.asmx" should be replaced with the ' actual name of the XML Web service file. node.@value = "http://" & providedName & "/" & svcName & "/Service1.asmx" foundIt = True End If Next node If Not foundIt Then Throw New InstallException("Config file did not contain a ServerName section") End If ' Writes out the new config file. xmlDoc.Save(fInfo.FullName) Finally install_log.WriteLine("Ending edit of config file") install_log.Close() End Try End Sub
En el código anterior primero se crea un archivo de registro de instalación, que registrará el progreso de la acción personalizada. El espacio de nombres System.Reflection se utiliza para buscar el ensamblado que se está instalando y para encontrar el archivo .config asociado. El modelo de documento XML se utiliza para recorrer el archivo .config hasta que se encuentre la sección appSettings . Cuando se encuentra la clave servername.service, se cambia el valor asociado de forma que incluya los parámetros que se pasaron, redirigiendo la aplicación para que utilice el nuevo servicio Web.
En el Explorador de soluciones, haga doble clic en el archivo Web.config para abrirlo.
Copie el valor de la clave del servicio Web en la sección appSettings . La clave presenta el formato servername.service, donde servername es el servidor en el que se encuentra el servicio Web y service es el nombre de dicho servicio Web.
Abra el módulo de la clase del instalador en el Editor de código y reemplace el texto "servername.service" por el valor copiado en el paso anterior.
Agregar un proyecto de programa de instalación Web
Los proyectos de instalación se utilizan para crear un instalador para la aplicación. Basándose en la tecnología de Windows Installer, los proyectos de instalación incluyen características como la capacidad de ejecutar acciones personalizadas y personalizar la interfaz de usuario durante la instalación. Para obtener más información sobre proyectos de programas de instalación, vea Implementar aplicaciones y componentes.
Para agregar un proyecto de programa de instalación Web
En el Explorador de soluciones, haga clic con el botón secundario del mouse en el nodo de la solución, después haga clic en Agregar y, a continuación, en Nuevo proyecto.
En el cuadro de diálogo Agregar nuevo proyecto, en el panel Tipos de proyecto, abra el nodo Otros tipos de proyectos y, a continuación, seleccione el nodo Proyectos de instalación e implementación.
En el panel Plantillas, seleccione Proyecto de programa de instalación Web. En el cuadro Nombre, asigne al proyecto el nombre WebAppSetup.
Cuando haga clic en Aceptar, el proyecto se agregará a la solución y se abrirá el Editor del sistema de archivos.
En la ventana Propiedades, seleccione la ProductName (Propiedad) y establézcala en el nombre de su aplicación Web.
En el Editor del sistema de archivos, seleccione la Carpeta de aplicación Web.
En el menú Acción, elija Agregar y, a continuación, haga clic en Resultados del proyecto.
En el cuadro de diálogo Agregar grupo de resultados del proyecto, seleccione InstallerClassLibrary en la lista desplegable Proyecto; a continuación, seleccione Resultado principal.
Cuando haga clic en Aceptar, el resultado principal de la biblioteca InstallerClassLibrary se agregará al proyecto de instalación Web.
Agregar una acción personalizada
Las acciones personalizadas se utilizan para ejecutar código al final de una instalación con el fin de realizar acciones que no pudieron controlarse durante este proceso. El código de una acción personalizada puede incluirse en un archivo .dll, .exe, de script o de ensamblado. Para obtener más información sobre acciones personalizadas, vea Administración de acciones personalizadas en la implementación.
Para agregar la clase del instalador a una acción personalizada
En el Explorador de soluciones, seleccione el proyecto WebAppSetup.
En el menú Ver, haga clic en Editor y, a continuación, haga clic en Acciones personalizadas.
Se abrirá el Editor de acciones personalizadas.
En el Editor de acciones personalizadas, seleccione el nodo Instalar.
En el menú Acción, elija Agregar acción personalizada.
Haga doble clic en la Carpeta de aplicación Web y, a continuación, seleccione Resultado principal de InstallerClassLibrary (activo).
En la ventana Propiedades, asegúrese de que la propiedad InstallerClass está establecida en True.
Seleccione la propiedad CustomActionData y escriba el siguiente texto: /ServerName=[EDITA1] /ServiceName=[EDITA2]
La propiedad CustomActionData proporciona los dos parámetros que se pasaron a la acción personalizada, separados por un espacio.
Agregar un cuadro de diálogo
Los cuadros de diálogo de la interfaz de usuario se muestran durante la instalación para recopilar información del usuario. Para obtener más información sobre los cuadros de diálogo de la interfaz de usuario, vea Administración de la interfaz de usuario en la implementación.
Para agregar un cuadro de diálogo de la interfaz de usuario
En el Explorador de soluciones, seleccione el proyecto de instalación.
En el menú Ver, elija Editor y, a continuación, haga clic en Interfaz de usuario.
En el Editor de la interfaz de usuario, seleccione el nodo Iniciar, situado bajo Instalar.
En el menú Acción, elija Agregar cuadro de diálogo.
En el cuadro de diálogo Agregar cuadro de diálogo, elija el cuadro de diálogo Cuadros de texto (A) y haga clic en Aceptar.
En el menú Acción, elija Subir; repita esta acción hasta ubicar el cuadro de diálogo Cuadros de texto (A) sobre el cuadro de diálogo Dirección de la instalación.
En la ventana Propiedades, defina las propiedades siguientes:
Propiedad
Valor
BannerText
Escriba el nombre del servidor y del servicio
Edit1Label
Nombre del servidor:
Edit1Value
Localhost
NotaÉste especifica el servidor predeterminado.Puede escribir el nombre del servidor predeterminado aquí.Edit2Label
Nombre del servicio:
Edit2Value
<nombre del servicio>
Edit3Visible
False
Edit4Visible
False
Tenga en cuenta que la propiedad Edit1Property se establece en "EDITA1" y la propiedad Edit2Property en "EDITA2". Estos valores se corresponden con los valores especificados en la propiedad CustomActionData del Editor de acciones personalizadas. Cuando el usuario escribe texto en estos controles de edición durante la instalación, los valores se pasan automáticamente mediante la propiedad CustomActionData.
Compilar e implementar la aplicación
El último paso es compilar el proyecto de instalación a fin de crear el instalador y, una vez creado, instalar la aplicación en el servidor de destino.
Para compilar el proyecto de instalación
- En el menú Generar, elija Generar nombreDeProyecto, donde nombreDeProyecto es el nombre del proyecto de instalación.
Para implementar la aplicación en un servidor Web del equipo de desarrollo
En el Explorador de soluciones, seleccione el proyecto de instalación.
En el menú Proyecto, haga clic en Instalar.
Para implementar la aplicación en un servidor Web de otro equipo
En el Explorador de Windows, navegue hasta el directorio del proyecto y busque el instalador que se ha compilado. La ruta de acceso predeterminada será \documents and settings\suNombreDeInicioDeSesión\Mis documentos\Proyectos de Visual Studio\nombreDeProyectoDeInstalación\configuración del proyecto\nombreDeProducto.msi. La configuración del proyecto predeterminada es Debug.
Copie el archivo .msi y todos los demás archivos y subdirectorios del directorio en el equipo del servidor Web.
En el equipo del servidor Web, haga doble clic en el archivo Setup.exe para ejecutar el instalador.
Vea también
Otros recursos
Implementar aplicaciones y componentes
Administración de acciones personalizadas en la implementación
Administración de la interfaz de usuario en la implementación