Configuración de enlaces para servicios Windows Communication Foundation

Con frecuencia al crear una aplicación desea delegar las decisiones al administrador tras la implementación de la aplicación. Por ejemplo, a menudo no hay manera de conocer de antemano qué será una dirección de servicio o un URI. En lugar de incluir una dirección en el código, es preferible permitir a un administrador hacerlo después de crear un servicio. Esta flexibilidad se logra a través de la configuración.

Nota

Utilice ServiceModel Metadata Utility Tool (Svcutil.exe) con el modificador /config para crear rápidamente archivos de configuración.

Secciones principales

El esquema de configuración Windows Communication Foundation (WCF) incluye las tres secciones principales siguientes (serviceModel, bindingsy services):

<configuration>
    <system.serviceModel>
        <bindings>
        </bindings>
        <services>
        </services>
        <behaviors>
        </behaviors>
    </system.serviceModel>
</configuration>

Elementos ServiceModel

Puede utilizar la sección limitada por el elemento system.ServiceModel para configurar un tipo de servicio con uno o más extremos, así como los valores para un servicio. Cada extremo se puede configurar a continuación con una dirección, un contrato y un enlace. Para los extremos Para obtener más información acerca de , vea Información general acerca de la creación de puntos finales.

Un enlace especifica transportes (HTTP, TCP, canalizaciones, Message Queue Server) y protocolos (seguridad, confiabilidad, flujos de transacción) y está compuesto de elementos de enlace, cada uno de los cuales especifica un aspecto sobre cómo un extremo se comunica con el mundo.

Por ejemplo, especificar el elemento basicHttpBinding indica que se utilice http como el transporte para un extremo. Se utiliza para conectar el extremo en tiempo de ejecución cuando se abre el servicio utilizando este extremo.

Hay dos tipos de enlaces: predefinidos y personalizados. Los enlaces predefinidos contienen combinaciones útiles de elementos que se utilizan en escenarios comunes. Para obtener una lista de tipos de enlace predefinidos que WCF proporciona, vea Enlaces proporcionados por el sistema. Si ninguna colección de enlace predefinido tiene la combinación correcta de características que una aplicación de servicio necesita, puede construir enlaces personalizados para satisfacer los requisitos de la aplicación. Para enlaces personalizados Para obtener más información acerca de , vea <customBinding>.

Los cuatro ejemplos siguientes muestran las configuraciones de enlace más comunes utilizadas para preparar un servicio WCF.

Especificar un extremo para utilizar un tipo de enlace

El primer ejemplo muestra cómo especificar un extremo configurado con una dirección, un contrato y un enlace.

<service type="HelloWorld, IndigoConfig, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null">
  <endpoint 
      address="/HelloWorld2/"
      contract="HelloWorld, IndigoConfig, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null"
      binding="basicHttpBinding" />
  </endpoint>
</service>

En este ejemplo, el atributo de type indica para qué tipo de servicio es la configuración. Al crear un servicio en su código con el contrato HelloWorld, se inicializa con todos los extremos definidos en la configuración del ejemplo. Si el ensamblado implementa sólo uno contrato de servicios, se puede omitir el atributo type porque el servicio utiliza el único tipo disponible. El atributo toma una cadena, que debe tener el formato Namespace.Class, AssemblyName, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null

El atributo address especifica el URI que otros extremos utilizan para comunicarse con servicio. El URI puede ser una ruta de acceso absoluta o relativa. Si se proporciona una dirección relativa, se espera que el host proporcione una dirección base que sea adecuada para el esquema de transporte usado en el enlace. Si no se configura una dirección, se supone que la dirección base es la dirección para ese extremo.

El atributo contract especifica el contrato que este extremo está exponiendo. El tipo de implementación de servicio debe implementar el tipo de contrato. Si una implementación de servicio implementa un tipo de contrato único, entonces se puede omitir esta propiedad.

El atributo binding selecciona un enlace predefinido o personalizado para utilizarlo para este extremo concreto. Un extremo que no selecciona explícitamente un enlace utiliza la selección de enlace predeterminada, que es BasicHttpBinding.

Modificar un enlace predefinido

En el ejemplo siguiente, un enlace predefinido se modifica y denomina. Se puede utilizar a continuación para configurar cualquier extremo en el servicio. El enlace se modifica estableciendo el valor ReceiveTimeout en 1 segundo. Observe que la propiedad devuelve un objeto TimeSpan.

Ese enlace alterado se encuentra en la sección de enlaces y se proporciona un nombre único al enlace alterado, shortTimeout, establecido por el atributo name. Este enlace alterado se puede utilizar al crear cualquier extremo estableciendo el atributo binding en el elemento endpoint en el nombre único. Esto le permite tener un número casi ilimitado de variaciones del enlace estándar.

Nota

Si no crea variaciones de un enlace estándar, no tiene que establecer el atributo bindingConfiguration en ningún valor. En ese caso, se utiliza el enlace predefinido no modificado.

<service type="HelloWorld, IndigoConfig, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null">
  <endpoint 
      address="/HelloWorld2/"
      contract="HelloWorld, IndigoConfig, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null"
      binding="basicHttpBinding" />
  </endpoint>
</service>
<bindings>
    <basicHttpBinding 
        name="shortTimeout"
        receiveTimeout="00:00:01"
    />
</bindings>

Configurar un comportamiento para aplicarlo a un servicio

En el ejemplo siguiente, un comportamiento concreto se configura para el tipo de servicio. El elemento metadataPublishing se utiliza para permitir a ServiceModel Metadata Utility Tool (Svcutil.exe) a consultar el servicio y generar los documentos Web Services Description Language (WSDL) de los metadatos.

<behaviors>
    <behavior name="MetaPlusExceptions" >
        <metadataPublishing enableGetWsdl="true" /> 
    </behavior>
</behaviors>
<services>
    <service 
       type="HelloWorld, IndigoConfig, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null"
       serviceBehaviorName="MetaPlusExceptions">
       <endpoint 
          address="http://computer:8080/Hello"
          contract="HelloWorld, IndigoConfig, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null"
          binding="basicHttpBinding" />
       </endpoint>
    </service>
</services>

La configuración anterior permite a un cliente llamar

svcutil /config:Client.exe.config http://computer:8080/Hello?wsdl

y obtener los metadatos del servicio tipo "HelloWorld".

Especificar un servicio con dos extremos utilizando valores de enlace diferentes

En este último ejemplo, dos extremos se configuran para el tipo de servicio Hello. Cada extremo utiliza un atributo bindingConfiguration personalizado diferente del mismo tipo de enlace (cada uno modifica basicHttpBinding).

<service type="HelloWorld, IndigoConfig, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null">
    <endpoint
        address="http://computer:8080/Hello"
        contract="HelloWorld, IndigoConfig, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null"
        binding="basicHttpBinding"
        bindingConfiguration="shortTimeout"
    </endpoint>
    <endpoint
        address="http://computer:8080/Hello"
        contract="HelloWorld, IndigoConfig, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null"
        binding="basicHttpBinding"
        bindingConfiguration="Secure"
     </endpoint>
</service>
<bindings>
    <basicHttpBinding 
        name="shortTimeout"
        timeout="00:00:00:01" 
     />
     <basicHttpBinding 
        name="Secure" />
        <Security mode="Transport" />
</bindings>

Consulte también

Conceptos

Enlaces proporcionados por el sistema
Información general acerca de la creación de puntos finales
Utilización de enlaces para configurar servicios y clientes