Configuración de servicios mediante archivos de configuración

Configurar un servicio de Windows Communication Foundation (WCF) con un archivo de configuración le da la flexibilidad de proporcionar datos de extremo y comportamiento del servicio en el punto de implementación en lugar de hacerlo en la fase de diseño. En este tema se describen las principales técnicas disponibles.

Se puede configurar un servicio de WCF mediante la tecnología de configuración .NET Framework. Por lo general, los elementos XML se agregan al archivo Web.config para un sitio de Internet Information Services (IIS) que hospeda un servicio WCF. Los elementos le permiten cambiar detalles como las direcciones de extremos (las direcciones reales utilizadas para comunicarse con el servicio) equipo a equipo. Además, WCF incluye varios elementos proporcionados por el sistema que le permiten seleccionar rápidamente las características más básicas de un servicio. En la práctica, escribir la configuración es una parte principal de la programación de aplicaciones de WCF.

Para obtener más información, consulte Configuración de enlaces para servicios Windows Communication Foundation. Para obtener una lista de los elementos más utilizados, consulte Enlaces proporcionados por el sistema.

System.Configuration: Web.config y App.config

WCF utiliza el sistema de configuración System.Configuration de .NET Framework.

Al configurar un servicio en Visual Studio, utilice un archivo Web.config o un archivo App.config para especificar los valores. El entorno de hospedaje determina la elección realizada del nombre del archivo de configuración para el servicio. Si está utilizando IIS para hospedar su servicio, utilice un archivo Web.config. Si está utilizando cualquier otro entorno de hospedaje, utilice un archivo App.config.

En Visual Studio, el archivo denominado App.config se utiliza para crear el archivo de configuración final. El nombre final realmente utilizado para la configuración depende del nombre de ensamblado. Por ejemplo, un ensamblado denominado "Cohowinery.exe" tiene un nombre final de archivo de configuración de "Cohowinery.exe.config". Sin embargo, sólo necesita modificar el archivo App.config. Los cambios realizados en ese archivo se realizan automáticamente en tiempo de compilación en el archivo final de configuración de la aplicación.

Al utilizar un archivo App.config, el sistema de configuración combina el archivo App.config con el contenido del archivo Machine.config cuando se inicia la aplicación y se aplica la configuración. Este mecanismo permite definir los valores de equipo en el archivo Machine.config. El archivo App.config se puede utilizar para invalidar los valores del archivo Machine.config; también puede bloquear los valores en el archivo Machine.config para que se utilicen. En el caso de Web.config, el sistema de configuración combina los archivos Web.config en todos los directorios ascendiendo hasta el directorio de la aplicación de la configuración que se aplica. Para obtener más información acerca de configuración y prioridades de los valores, vea los temas de System.Configuration.

Secciones principales del archivo de configuración

Las secciones principales del archivo de configuración incluyen los elementos siguientes.

<system.ServiceModel>

   <services>
      <service>
         <endpoint/>
      </service>
   </services>

   <bindings>
   <!-- Specify one or more of the system-provided binding elements,
    for example, <basicHttpBinding> --> 
   <!-- Alternatively, <customBinding> elements. -->
      <binding>
      <!-- For example, a <BasicHttpBinding> element. -->
      </binding>
   </bindings>

   <behaviors>
   <!-- One or more of the system-provided or custom behavior elements. -->
      <behavior>
      <!-- For example, a <throttling> element. -->
      </behavior>
   </behaviors>

</system.ServiceModel>

Nota

Las secciones de enlaces y comportamientos son opcionales y sólo se incluyen si son necesarias.

El elemento <services>

El elemento services contiene las especificaciones para todos los servicios que la aplicación hospeda.

<services> element reference

El elemento <service>

Cada elemento service tiene estos atributos:

  • name. Especifica el tipo que proporciona una implementación de un contrato de servicios. Éste es un nombre completo (espacio de nombres y nombre de tipo).
  • behaviorConfiguration. Especifica el nombre de uno de los elementos behavior encontrados en el elemento behaviors. El comportamiento especificado rige las acciones como si el servicio permitiese la suplantación.
  • <service> element reference

El elemento <endpoint>

Cada extremo requiere una dirección, un enlace y un contrato, que están representados por los atributos siguientes:

  • address. Especifica el Identificador uniforme de recursos (URI) del servicio, que puede ser una dirección absoluta o una relativa a la dirección base del servicio. Si está establecido en una cadena vacía, indica que el extremo está disponible en la dirección base que se especifica al crear ServiceHost para el servicio.
  • binding. Normalmente especifica un enlace proporcionado por el sistema como WsHttpBinding, pero también puede especificar un enlace definido por el usuario. El enlace especificado determina el tipo de transporte, seguridad y codificación utilizados y si se admiten o habilitan sesiones confiables, transacciones, o la transmisión por secuencias.
  • bindingConfiguration. Si se deben modificar los valores predeterminados de un enlace, esto se puede hacer configurando el elemento de binding adecuado en el elemento bindings. Este atributo debería recibir el mismo valor que el atributo name del elemento de binding que se utiliza para cambiar los valores predeterminados.
  • contract. Especifica la interfaz que define el contrato. Ésta es la interfaz implementada en el tipo de Common Language Runtime (CLR) especificado por el atributo name del elemento service.
  • <endpoint> element reference

El elemento <bindings>

El elemento bindings contiene las especificaciones para todos los enlaces que puede utilizar cualquier extremo definido en cualquier servicio.

<bindings> element reference

El elemento <binding>

Los elementos binding contenidos en el elemento bindings pueden ser uno de los enlaces proporcionados por el sistema (consulte Enlaces proporcionados por el sistema) o un enlace personalizado (consulte Enlaces personalizados). El elemento binding tiene un atributo name que pone en correlación el enlace con el extremo especificado en el atributo bindingConfiguration del elemento endpoint.

Para obtener más información acerca de configuración de servicios y clientes, consulte Configuración de aplicaciones de Windows Communication Foundation.

<binding> element reference

El elemento <behaviors>

Éste es un elemento contenedor para los elementos behavior que definen los comportamientos de un servicio.

<behaviors> element reference

El elemento <behavior>

Cada elemento behavior es identificado por un atributo name y proporciona o un comportamiento proporcionado por el sistema, como <throttling> o un comportamiento personalizado.

<behavior> element reference

Uso de las configuraciones de comportamientos y enlaces

WCF hace fácil compartir las configuraciones entre extremos utilizando un sistema de referencia en la configuración. En lugar de asignar directamente los valores de configuración a un extremo, los valores de configuración relacionados con el enlace se agrupan en elementos bindingConfiguration de la sección <binding>. Una configuración de enlace es un grupo con nombre de valores en un enlace. Entonces, los extremos pueden hacer referencia a bindingConfiguration por nombre.

<?xml version="1.0" encoding="utf-8"?>
<configuration>
 <system.serviceModel>
  <bindings>
    <basicHttpBinding>
     <binding name="myBindingConfiguration1" closeTimeout="00:01:00" />
     <binding name="myBindingConfiguration2" closeTimeout="00:02:00" />
    </basicHttpBinding>
     </bindings>
     <services>
      <service name="myServiceType">
       <endpoint 
          address="myAddress" binding="basicHttpBinding" 
          bindingConfiguration="myBindingConfiguration1" />
       </service>
      </services>
    </system.serviceModel>
</configuration>

El name de la bindingConfiguration se establece en el elemento <binding>. El name debe ser una cadena única dentro del ámbito del tipo de enlace, en este caso el <basicHttpBinding>. El extremo vincula a la configuración estableciendo el atributo bindingConfiguration en esta cadena.

Una behaviorConfiguration se implementa de la misma manera, tal y como se muestra en el ejemplo siguiente.

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <system.serviceModel>
    <behaviors>
      <endpointBehaviors>
        <behavior name="myBehavior">
           <callbackDebug includeExceptionDetailInFaults="true" />
         </behavior>
       </endpointBehaviors>
    </behaviors>
    <services>
     <service name="NewServiceType">
       <endpoint 
          address="myAddress" behaviorConfiguration="myBehavior"
          binding="basicHttpBinding" />
      </service>
    </services>
   </system.serviceModel>
</configuration>

Este sistema permite a los extremos compartir configuraciones comunes sin volver a definir la configuración. Si se requiere el ámbito de equipo, cree el comportamiento de enlace o configuración en Machine.config. Los valores de configuración están disponibles en todos los archivos App.config. La Configuration Editor Tool (SvcConfigEditor.exe) facilita la creación de configuraciones.

Consulte también

Otros recursos

Configuración de aplicaciones de Windows Communication Foundation
<service>
<binding>