Compartir vía


<serviceHostingEnvironment>

Este elemento define el tipo en el que el entorno de hospedaje de servicio crea instancias de un transporte determinado. Si este elemento está vacío, se usa el tipo predeterminado. Este elemento solo se puede usar en los archivos de configuración del nivel de aplicación o equipo.

<configuration>
  <system.serviceModel>
    <serviceHostingEnvironment>

Sintaxis

<serviceHostingEnvironment aspNetCompatibilityEnabled="Boolean"
                           minFreeMemoryPercentageToActivateService="Integer"
                           multipleSiteBindingsEnabled="Boolean">
  <baseAddressPrefixFilters>
    <add prefix="string" />
  </baseAddressPrefixFilters>
  <serviceActivations>
    <add factory="String"
         service="String" />
  </serviceActivations>
  <transportConfigurationTypes>
    <add name="String"
         transportConfigurationType="String" />
  </transportConfigurationTypes>
</serviceHostingEnvironment>

Atributos y elementos

En las siguientes secciones se describen los atributos, los elementos secundarios y los elementos primarios.

Atributos

Atributo Descripción
aspNetCompatibilityEnabled Un valor booleano que indica si se ha activado el modo de compatibilidad de ASP.NET para la aplicación actual. El valor predeterminado es false.

Cuando este atributo se establece en true, solicita flujo de servicios a Windows Communication Foundation (WCF) a través de la canalización HTTP de ASP.NET y se prohíbe la comunicación a través de los protocolos que no son HTTP. Para obtener más información, vea Servicios de WCF y ASP.NET.
minFreeMemoryPercentageToActivateService Un entero que especifica la cantidad mínima de memoria libre que debería tener disponible el sistema antes de que se pueda activar un servicio WCF. Advertencia: Al especificar este atributo junto con la confianza parcial en el archivo web.config de un servicio, se generará una clase SecurityException cuando se ejecute el servicio.
multipleSiteBindingsEnabled Valor booleano que especifica si están habilitados varios enlaces de IIS por sitio.

IIS se compone de sitios web, que son contenedores de aplicaciones virtuales que contienen directorios virtuales. Se puede tener acceso a la aplicación de un sitio a través de uno o varios enlaces de IIS. Un enlace de IIS proporciona dos piezas de información: un protocolo de enlace e información de enlace. El protocolo de enlace define el esquema sobre el que se produce la comunicación, y la información de enlace es la información usada para tener acceso al sitio. Un ejemplo de un protocolo de enlace puede ser HTTP, mientras que la información de enlace puede contener una dirección IP, un puerto, un encabezado de host, etc.

IIS permite especificar varios enlaces de IIS por sitio, lo que genera varias direcciones base por esquema. Sin embargo, un servicio de Windows Communication Foundation (WCF) hospedado en un sitio permite enlazar únicamente a una baseAddress por esquema.

Para habilitar varios enlaces de IIS por sitio para un servicio de Windows Communication Foundation (WCF), establezca este atributo en true. Observe que solo se admiten varios enlaces del sitio para el protocolo HTTP. La dirección de puntos de conexión en el archivo de configuración tiene que ser un URI completo.

Elementos secundarios

Elemento Descripción
<baseAddressPrefixFilters> Una colección de elementos de configuración que especifican los filtros de prefijo de las direcciones base usadas por el host de servicio.
<serviceActivations> Sección de configuración que describe la configuración de activación.
<transportConfigurationTypes> Una colección de elementos de configuración que identifican el tipo de un transporte determinado.

Elementos primarios

Elemento Descripción
serviceModel El elemento raíz de todos los elementos de configuración de la Windows Communication Foundation (WCF).

Comentarios

De forma predeterminada, los servicios WCF se ejecutan en paralelo con ASP.NET en dominios de aplicación hospedados (AppDomain). Aunque WCF y ASP.NET pueden coexistir en el mismo AppDomain, la canalización de HTTP de ASP.NET no procesa de forma predeterminada las solicitudes de WCF. Como resultado, varios elementos de la plataforma de la aplicación ASP.NET no están disponibles para los servicios WCF. Entre ellas se incluyen las siguientes:

  • Autorización de dirección URL/archivo de ASP.NET

  • Suplantación de ASP.NET

  • Estado de sesión basado en cookies

  • HttpContext.Current

  • Extensibilidad de la canalización a través de HttpModule personalizado

Si sus servicios WCF necesitan funcionar en el contexto de ASP.NET, y solo comunicarse sobre HTTP, puede usar el modo de compatibilidad de ASP.NET de WCF. Este modo se activa cuando el atributo aspNetCompatibilityEnabled se establece en true en el nivel de aplicación. Las implementaciones del servicio deben declarar su capacidad de ejecutarse en modo de compatibilidad usando la clase AspNetCompatibilityRequirementsAttribute. Cuando el modo de compatibilidad está habilitado

  • Se exige la autorización de dirección URL/archivo de ASP.NET antes que la autorización de WCF. Una decisión de autorización se basa en la identidad a nivel de transporte de la solicitud. Se omiten las identidades a nivel de mensaje.

  • Las operaciones del servicio WCF empiezan a ejecutarse en el contexto de suplantación de ASP.NET. Si la suplantación de ASP.NET y la suplantación de WCF están habilitadas para un servicio concreto, se aplica el contexto de suplantación de WCF.

  • HttpContext.Current se puede usar del código del servicio WCF y se evita que los servicios expongan los puntos de conexión que no son HTTP.

  • La canalización de ASP.NET procesa las solicitudes de WCF. HttpModules que se ha configurado para actuar en solicitudes entrante también puede procesar las solicitudes de WCF. Éstas pueden incluir componentes de plataforma de ASP.NET (por ejemplo, SessionStateModule), y también módulos personalizados de terceros.

Ejemplo

El ejemplo de código siguiente muestra cómo habilitar el modo de compatibilidad de ASP.

Código

<serviceHostingEnvironment aspNetCompatibilityEnabled="true"/>

Consulte también