Configuración simplificada

Configurar los servicios de Windows Communication Foundation (WCF) puede ser una tarea compleja. Existen muchas opciones diferentes y no siempre es fácil determinar qué configuración es necesaria. Aunque los archivos de configuración aumentan la flexibilidad de los servicios de WCF, también son el origen de muchos problemas de difícil detección. .NET Framework versión 4 aborda estos problemas y proporciona a los usuarios una manera de reducir el tamaño y la complejidad de la configuración del servicio.

Configuración simplificada

En los archivos de configuración de WCF, la sección <system.serviceModel> contiene un elemento <service> para cada servicio hospedado. El elemento <service> contiene una recopilación de elementos <endpoint> que especifican los extremos expuestos para cada servicio y, opcionalmente, un conjunto de comportamientos del servicio. Los elementos <endpoint> especifican la dirección, el enlace y el contrato expuestos por el extremo y, opcionalmente, la configuración de enlace y los comportamientos de los extremos. La sección <system.serviceModel> también contiene un elemento <behaviors> que le permite especificar los comportamientos de los servicios o los extremos. En el ejemplo siguiente, se muestra la sección <system.serviceModel> de un archivo de configuración.

system.serviceModel>
  <behaviors>
    <serviceBehaviors>
      <behavior name=”MyServiceBehavior”>
        <serviceMetadata httpGetEnabled=”true”>
        <serviceDebug includeExceptionDetailInFaults=”false”>
      </behavior>
    </serviceBehaviors>
  </behaviors>
  <bindings>
   <basicHttpBinding>
      <binding name=MyBindingConfig”
               maxBufferSize=”100”
               maxReceiveBufferSize=”100” />
   </basicHttpBinding>
   </bindings>   <services>
    <service behaviorConfiguration=”MyServiceBehavior”
             name=”MyService”>
      <endpoint address=””
                binding=”basicHttpBinding”
                contract=”ICalculator”
                bindingConfiguration=”MyBindingConfig” />
      <endpoint address=”mex”
                binding=”mexHttpBinding”
                contract=”IMetadataExchange”/>
    </service>
  </services>
</system.serviceModel>

.NET Framework 4 facilita la configuración de un servicio de WCF eliminando el requisito del elemento <service>. Si no agrega ningún extremo en la sección <service> (si existe), y el servicio no define ningún extremo mediante programación, entonces se agrega automáticamente al servicio un conjunto de extremos, uno para cada dirección base del servicio y para cada contrato implementado por el servicio. En cada uno de estos extremos, la dirección del extremo corresponde a la dirección base, el esquema de la dirección base determina el enlace y el contrato es el implementado por el servicio. Si no necesita especificar ningún extremo o comportamientos del servicio, ni realizar ningún cambio de configuración de enlaces, no necesita especificar ningún archivo de configuración. Si un servicio implementa dos contratos y el host habilita transportes HTTP y TCP, el host de servicio crea cuatro extremos predeterminados, uno para cada contrato al usar cada transporte. Para crear extremos predeterminados, el host de servicio debe conocer qué enlaces hay que utilizar. Esta configuración se especifica en una sección <protocolMappings> dentro de la sección <system.serviceModel>. La sección <protocolMappings> contiene una lista de esquemas de protocolos de transporte asignada a los tipos de enlaces. El host de servicio usa las direcciones base que se le han transmitido para determinar qué enlace debe usar. El ejemplo siguiente usa el elemento <protocolMappings>.

Ee358768.note(es-es,VS.100).gifNota:
Los servicios hospedados en Internet Information Services (IIS) o en el Servicio de activación de procesos de Windows (WAS) usan el directorio virtual como su dirección base.

<protocolMapping>
  <add scheme=”http”     binding=”basicHttpBinding” bindingConfiguration=”MyBindingConfiguration”/>
  <add scheme=”net.tcp”  binding=”netTcpBinding”/>
  <add scheme=”net.pipe” binding=”netNamedPipeBinding”/>
  <add scheme=”net.msmq” binding=”netMSMQBinding”/>
</protocolMapping>

En el ejemplo anterior, un extremo con una dirección base que se inicia con el esquema de "http" utiliza BasicHttpBinding. Un extremo con una dirección base que se inicia con el esquema "net.tcp" usa NetTcpBinding. Puede invalidar la configuración en un archivo App.config o Web.config local.

Cada elemento dentro de la sección <protocolMappings> debe especificar un esquema y un enlace. Opcionalmente, puede indicar un atributo bindingConfiguration que especifique una configuración de enlace dentro de la sección <bindings> del archivo de configuración. Si no se especifica bindingConfiguration, se utiliza la configuración de enlace anónima del tipo de enlace adecuado.

Los comportamientos del servicio se configuran para los extremos predeterminados mediante secciones <behavior> anónimas dentro de secciones <serviceBehaviors>. Todos los elementos <behavior> sin nombre dentro de <serviceBehaviors> se utilizan para configurar comportamientos del servicio. Por ejemplo, el siguiente archivo de configuración habilita la publicación de metadatos del servicio para todos los servicios dentro del host.

<system.serviceModel>
    <behaviors>
      <serviceBehaviors>
        <behavior>
          <serviceMetadata httpGetEnabled="True"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>    <!-- No <service> tag is necessary. Default endpoints are added to the service -->
    <!-- The service behavior with name="" is picked up by the service -->
 </system.serviceModel>

Los comportamientos de los extremos se configuran mediante secciones <behavior> anónimas dentro de secciones <serviceBehaviors>.

El siguiente ejemplo es un archivo de configuración equivalente al del principio de este tema que utiliza el modelo de configuración simplificado.

<system.serviceModel>
    <behaviors>
      <serviceBehaviors>
        <behavior>
          <serviceMetadata httpGetEnabled="True"/>
          <serviceDebug includeExceptionDetailInFaults=”false”/>
        </behavior>
      </serviceBehaviors>
    </behaviors>    <bindings>
       <basicHttpBinding>
          <binding maxBufferSize=”100”
                   maxReceiveBufferSize=”100” />
       </basicHttpBinding>
    </bindings>    <!-- No <service> tag is necessary. Default endpoints will be added to the service -->
    <!-- The service behavior with name="" will be picked up by the service -->
    <protocolMapping>
      <add scheme=”http”     binding=”basicHttpBinding” / </protocolMapping>
  </system.serviceModel>

Vea también

Conceptos

Configuración de servicios mediante archivos de configuración
Configuración de enlaces para servicios Windows Communication Foundation
Configuración de enlaces proporcionados por el sistema

Otros recursos

Configuración de servicios
Configuring Windows Communication Foundation Applications