Implementación de un servicio WFC hospedado en Internet Information Services
El desarrollo y la implementación de un servicio de Windows Communication Foundation (WCF) hospedado en Internet Information Services (IIS) consta de las tareas siguientes:
Asegúrese de que IIS, ASP.NET, WCF y el componente de activación de WCF están correctamente instalados y registrados.
Cree una aplicación de IIS nueva o reutilice una aplicación de ASP.NET.
Cree un archivo .svc para el servicio WCF.
Implemente la implementación de servicio en la aplicación IIS.
Configure el servicio WCF.
Para acceder a una guía detallada sobre la creación de un servicio WCF hospedado en IIS, vea Procedimientos para hospedar un servicio WCF en IIS.
Asegurarse de que IIS, ASP.NET y WCF se instalen y registren correctamente
WCF, IIS y ASP.NET deben instalarse para que los servicios WCF hospedados en IIS funcionen correctamente. Los procedimientos para instalar WCF (como parte de .NET Framework), ASP.NET y IIS varían en función del sistema operativo. Para obtener más información sobre cómo instalar WCF y .NET Framework, vea Instalación de .NET Framework para desarrolladores. Para instalar IIS en Windows 10, abra Programas y características en el Panel de control y, después, seleccione Activar o desactivar las características de Windows. En Características de Windows, seleccione Internet Information Services y luego elija Aceptar.
Para encontrar instrucciones a fin de instalar IIS en otros sistemas operativos, vea Instalación de IIS en Windows Vista y Windows 7 e Instalación de IIS 8.5 en Windows Server 2012 R2.
El proceso de instalación para .NET Framework registra automáticamente WCF con IIS si este último ya está presente en la máquina. Si IIS se instala después de .NET Framework, se requiere un paso adicional para registrar WCF con IIS y ASP.NET. Puede hacer esto de la siguiente manera, en función de su sistema operativo:
Windows 7 y Windows Server 2003: use la herramienta de registro ServiceModel (ServiceModelReg.exe) para registrar WCF con IIS. Para usar esta herramienta, escriba
ServiceModelReg.exe /i /x
en Símbolo del sistema para desarrolladores de Visual Studio o PowerShell de Visual Studio para desarrolladores.Windows 7: finalmente debe comprobar que ASP.NET se configura para utilizar la versión 4 de .NET Framework o una posterior. Para ello, ejecute la herramienta ASPNET_Regiis con la opción
–i
. Para obtener más información, vea Herramienta de registro de IIS en ASP.NET.
Crear una nueva aplicación de IIS o reutilizar una aplicación de ASP.NET existente
Los servicios WCF hospedados en IIS deben residir dentro de una aplicación IIS. Puede crear una aplicación IIS para hospedar exclusivamente servicios WCF. O bien puede implementar un servicio WCF en una aplicación existente que ya hospede contenido de ASP.NET 2.0 (como páginas .aspx y servicios web ASP.NET [ASMX]). Para obtener más información sobre estas opciones, vea las secciones "Hospedaje de WCF en paralelo con ASP.NET" y "Servicios WCF en el modo de compatibilidad de ASP.NET" de Servicios WCF y ASP.NET.
Observe que IIS 6.0 y versiones posteriores reinician periódicamente una aplicación de programación orientada a objetos aislada. El valor predeterminado es de 1740 minutos. El valor máximo admitido son 71.582 minutos. Este reinicio se puede deshabilitar. Para obtener más información sobre esta propiedad, vea PeriodicRestartTime.
Cree un archivo .svc para el servicio de WCF.
Los servicios WCF hospedados en IIS se representan como archivos de contenido especial (archivos .svc) dentro de la aplicación IIS. Este modelo es similar a la manera en que se representan las páginas ASMX dentro de una aplicación IIS como archivos .asmx. Un archivo .svc contiene una directiva de procesamiento específica de WCF (@ServiceHost) que permite que la infraestructura de hospedaje de WCF active los servicios hospedados como respuesta a los mensajes entrantes. La sintaxis más común para un archivo .svc se encuentra en la instrucción siguiente.
<% @ServiceHost Service="MyNamespace.MyServiceImplementationTypeName" %>
Consta de la directiva @ServiceHost y de un único atributo, Service
. El valor del atributo Service
es el nombre del tipo de Common Language Runtime (CLR) de la implementación del servicio. El uso de esta directiva es básicamente equivalente a crear un host de servicio mediante el uso del código siguiente.
new ServiceHost( typeof( MyNamespace.MyServiceImplementationTypeName ) );
La configuración de hospedaje adicional, como el crear una lista de direcciones base, también puede realizarse. También puede utilizar un ServiceHostFactory personalizado para extender la directiva para el uso con soluciones de hospedaje personalizadas. Las aplicaciones IIS que hospedan servicios WCF no son responsables de administrar la creación y duración de las instancias de ServiceHost. La infraestructura de hospedaje de WCF administrada crea dinámicamente la instancia de ServiceHost necesaria cuando se recibe la primera solicitud para el archivo .svc. La instancia no se libera hasta que se cierre explícitamente mediante código o cuando se recicle la aplicación.
Para obtener más información sobre la sintaxis de los archivos .svc, vea @ServiceHost.
Implementación de la implementación de servicio en la aplicación IIS
Los servicios WCF hospedados en IIS usan el mismo modelo de compilación dinámica que ASP.NET 2.0. Al igual que con ASP.NET, puede implementar el código de implementación para servicios WCF hospedados en IIS de varias maneras en varias ubicaciones, de la siguiente manera:
Como un archivo .dll precompilado ubicado en la caché global de ensamblados (GAC) o en el directorio \bin de la aplicación. Los binarios precompilados no se actualizan hasta que se implementa una nueva versión de la biblioteca de clases.
Como archivos de código fuente sin compilar situados en el directorio \App_Code de la aplicación. Los archivos de código fuente ubicados en este directorio se solicitan dinámicamente al procesar la primera solicitud de la aplicación. Cualquier cambio en los archivos del directorio \App_Code hace que se recicle y recompile la aplicación al completo cuando se recibe la siguiente solicitud.
Como código sin compilar colocado directamente en el archivo .svc. El código de implementación también se puede encontrar integrado en el archivo .svc del servicio, después de la directiva @ServiceHost. Los cambios realizados en el código integrado hacen que la aplicación se recicle y vuelva a compilarse cuando se recibe la siguiente solicitud.
Para obtener más información sobre el modelo de compilación de ASP.NET 2.0, vea Información general de compilación de ASP.NET.
Configuración del servicio WCF
Los servicios WCF hospedados en IIS almacenan su configuración en el archivo Web.config de aplicaciones. Los servicios hospedados en IIS utilizan los mismos elementos de configuración y sintaxis que los servicios WCF hospedados fuera de IIS. Sin embargo, las siguientes restricciones son únicas del entorno de hospedaje de IIS:
Direcciones base para servicios hospedados en IIS.
Las aplicaciones que hospedan servicios WCF fuera de IIS pueden controlar la dirección base de los servicios que hospedan pasando un conjunto de URI de dirección base al constructor ServiceHost o proporcionando un elemento <host> en la configuración del servicio. Los servicios hospedados en IIS no tienen la capacidad de controlar sus direcciones base; la dirección base de un servicio hospedado en IIS es la dirección de su archivo .svc.
Direcciones de extremos para servicios hospedados en IIS
Cuando se hospeda en IIS, las direcciones de extremo siempre se considera que son relativas a la dirección del archivo .svc que representa al servicio. Por ejemplo, si la dirección base de un servicio WCF es http://localhost/Application1/MyService.svc
con la configuración de punto de conexión siguiente:
<endpoint address="anotherEndpoint" />
Esto proporciona un punto de conexión al que se puede acceder en http://localhost/Application1/MyService.svc/anotherEndpoint
.
De forma similar, el elemento de configuración de punto de conexión que utiliza una cadena vacía como dirección relativa proporciona un punto de conexión al que se puede acceder en http://localhost/Application1/MyService.svc
, que es la dirección base.
<endpoint address="" />
Siempre debe utilizar direcciones de extremo relativas para los extremos de servicio hospedados en IIS. Proporcionar una dirección de punto de conexión completa (por ejemplo, http://localhost/MyService.svc
) puede llevar a errores en la implementación del servicio si la dirección del punto de conexión no señala a la aplicación IIS que hospeda el servicio que expone el punto de conexión. El uso de direcciones de extremo relativas para servicios hospedados evita estos posibles conflictos.
Transportes disponibles
Los servicios WCF hospedados en IIS 5.1 e IIS 6.0 están limitados a utilizar la comunicación basada en HTTP. En estas plataformas de IIS, configurar un servicio hospedado para utilizar un enlace no HTTP genera un error durante la activación del servicio. En el caso de IIS 7.0, entre los transportes admitidos se incluyen HTTP, Net.TCP, Net.Pipe, Net.MSMQ y msmq.formatname para la compatibilidad con versiones anteriores con respecto a aplicaciones MSMQ existentes.
Seguridad de transporte HTTP
Los servicios WCF hospedados en IIS pueden utilizar la seguridad del transporte HTTP (por ejemplo, esquemas de autenticación HTTP y HTTPS, como la autenticación básica, implícita e integrada de Windows) siempre que el directorio virtual de IIS que contiene el servicio admita esos valores. Los valores de seguridad de transporte HTTP de un enlace del extremo hospedado deben coincidir con los valores de seguridad de transporte del directorio virtual de IIS que lo contenga.
Por ejemplo, un punto de conexión de WCF configurado para utilizar la autenticación implícita de HTTP debe residir en un directorio virtual de IIS que también esté configurado para permitir la autenticación implícita HTTP. Las combinaciones que no coincidan de los valores de IIS y los valores de puntos de conexión de WCF producen un error durante la activación del servicio.