Compartir a través de


Especificación del comportamiento en tiempo de ejecución del servicio

Una vez que ha diseñado un contrato de servicios (Diseño de contratos de servicios) y ha implementado su contrato de servicios (Implementación de contratos de servicio) puede configurar el comportamiento de la operación del tiempo de ejecución del servicio. En este tema se tratan los comportamientos de operaciones y el servicio proporcionado por el sistema y describe dónde encontrar más información para crear nuevos comportamientos. Aunque algunos comportamientos se aplican como atributos, muchos se aplican utilizando un archivo de configuración de la aplicación o mediante programación. Para obtener más información sobre configuración de la aplicación de servicio, vea Configuración de servicios.

Información general

El contrato define las entradas, las salidas, los tipos de datos y las características de un servicio de ese tipo. Al implementar un contrato de servicios, se crea una clase que, cuando se configura con un enlace en una dirección, cumple el contrato que implementa. El cliente conoce la información contractual, de enlace y dirección; sin esa información, el cliente no puede utilizar el servicio.

Sin embargo, las características de la operación, como los problemas de los subprocesos o la administración de instancias, son opacas para los clientes. Cuando haya implementado su contrato de servicios, puede configurar un gran número de características de operaciones utilizando los comportamientos. Los comportamientos son objetos que modifican el tiempo de ejecución de Windows Communication Foundation (WCF) estableciendo una propiedad en tiempo de ejecución o insertando un tipo de personalización en el tiempo de ejecución. Para obtener más información sobre modificación del tiempo de ejecución mediante la creación de comportamientos definidos por el usuario, vea Extensión de ServiceHost y la capa de modelos de servicios.

Los atributos System.ServiceModel.ServiceBehaviorAttribute y System.ServiceModel.OperationBehaviorAttribute son los comportamientos más útiles y exponen las funciones de operaciones más solicitadas. Puesto que son atributos, se han de aplicar a la implementación de la operación o el servicio. Otros comportamientos, como System.ServiceModel.Description.ServiceMetadataBehavior o System.ServiceModel.Description.ServiceDebugBehavior, se aplican, normalmente, mediante un archivo de configuración de la aplicación, aunque puede utilizarlos mediante programación.

Este tema ofrece información general sobre los atributos ServiceBehaviorAttribute y OperationBehaviorAttribute, describe los diversos ámbitos en los que pueden funcionar los comportamientos y proporciona una descripción rápida de muchos de los comportamientos proporcionados por el sistema en los diversos ámbitos que pueden ser de interés para los programadores de WCF.

ServiceBehaviorAttribute y OperationBehaviorAttribute

Los comportamientos más importantes son los atributos ServiceBehaviorAttribute y OperationBehaviorAttribute, que puede utilizar para controlar:

  • La duración de las instancias

  • La compatibilidad con respecto a la simultaneidad y la sincronización

  • Comportamiento de configuración

  • Comportamiento de transacción

  • Comportamiento de serialización

  • Transformación de metadatos

  • Duración de sesión

  • Filtrado de direcciones y procesamiento de encabezados

  • Suplantación

  • Para utilizar estos atributos, marque el servicio o implementación de la operación con el atributo adecuado a ese ámbito y establezca las propiedades. Por ejemplo, el siguiente ejemplo de código muestra una implementación de la operación que utiliza la propiedad System.ServiceModel.OperationBehaviorAttribute.Impersonation para requerir que los llamadores de esta operación admitan la suplantación.

Imports System.ServiceModel
Imports System.Threading

Namespace Microsoft.WCF.Documentation
  <ServiceContract(Name:="SampleHello", Namespace:="http://microsoft.wcf.documentation")> _
  Public Interface IHello
    <OperationContract> _
    Function Hello(ByVal greeting As String) As String
  End Interface

  Public Class HelloService
      Implements IHello

    Public Sub New()
      Console.WriteLine("Service object created: " & Me.GetHashCode().ToString())
    End Sub

    Protected Overrides Sub Finalize()
      Console.WriteLine("Service object destroyed: " & Me.GetHashCode().ToString())
    End Sub

    <OperationBehavior(Impersonation:=ImpersonationOption.Required)> _
    Public Function Hello(ByVal greeting As String) As String Implements IHello.Hello
      Console.WriteLine("Called by: " & Thread.CurrentPrincipal.Identity.Name)
      Console.WriteLine("IsAuthenticated: " & Thread.CurrentPrincipal.Identity.IsAuthenticated.ToString())
      Console.WriteLine("AuthenticationType: " & Thread.CurrentPrincipal.Identity.AuthenticationType.ToString())

      Console.WriteLine("Caller sent: " & greeting)
      Console.WriteLine("Sending back: Hi, " & Thread.CurrentPrincipal.Identity.Name)
      Return "Hi, " & Thread.CurrentPrincipal.Identity.Name
    End Function
  End Class
End Namespace

Muchas de las propiedades requieren una compatibilidad adicional del enlace. Por ejemplo, una operación que requiere una transacción del cliente se debe configurar para que utilice un enlace que admita transacciones de flujo.

Servicios conocidos singleton

Puede utilizar los atributos ServiceBehaviorAttribute y OperationBehaviorAttribute para controlar ciertas duraciones, de InstanceContext y de los objetos de servicio que implementan las operaciones.

Por ejemplo, la propiedad System.ServiceModel.ServiceBehaviorAttribute.InstanceContextMode controla con qué frecuencia se libera el InstanceContext, y las propiedades System.ServiceModel.OperationBehaviorAttribute.ReleaseInstanceMode y System.ServiceModel.ServiceBehaviorAttribute.ReleaseServiceInstanceOnTransactionComplete controlan cuando se libera el objeto de servicios.

Sin embargo, también puede crear un objeto de servicio y crear el host de servicio mediante ese objeto. Para hacerlo, debe establecer también la propiedad System.ServiceModel.ServiceBehaviorAttribute.InstanceContextMode en Single o se producirá una excepción al abrir el host del servicio.

Utilice el constructor System.ServiceModel.ServiceHost.#ctor(System.Object,System.Uri[]) para crear este tipo de servicio. Ofrece una alternativa para implementar un System.ServiceModel.Dispatcher.IInstanceContextInitializer personalizado cuando desee proporcionar una instancia de objeto concreta para su uso con el servicio de singleton. Puede utilizar esta sobrecarga cuando su tipo de implementación de servicio sea difícil de construir (por ejemplo, si no implementa un constructor público predeterminado que no tiene parámetros).

Tenga en cuenta que cuando se proporciona un objeto a este constructor, algunas características relacionadas con el comportamiento de creación de instancias de Windows Communication Foundation (WCF) funcionan de manera diferente. Por ejemplo, llamar a System.ServiceModel.InstanceContext.ReleaseServiceInstance, no tiene ningún efecto cuando se proporciona una instancia de objeto conocida. De igual forma, se omite cualquier otro mecanismo de lanzamiento de instancia. La clase ServiceHost siempre se comporta como si la propiedad System.ServiceModel.OperationBehaviorAttribute.ReleaseInstanceMode se hubiese establecido en System.ServiceModel.ReleaseInstanceMode.None para todas las operaciones.

Otros comportamientos de servicio, extremo, contrato y operación

Los comportamientos de servicios, como el atributo ServiceBehaviorAttribute, funcionan en a lo largo de todo un servicio. Por ejemplo, si establece la propiedad System.ServiceModel.ServiceBehaviorAttribute.ConcurrencyMode en System.ServiceModel.ConcurrencyMode.Multiple debe administrar usted mismo los problemas de sincronización de subprocesos dentro de cada operación de ese servicio. Los comportamientos de extremos funcionan a lo largo de un extremo; muchos de los comportamientos de extremo proporcionados por el sistema se han creado para ofrecer funcionalidad de cliente. Los comportamientos de contratos funcionan en el nivel del contrato y los comportamientos de operaciones modifican la entrega de la operación.

Muchos de estos comportamientos se implementan en atributos y usted los utiliza como lo haría con los atributos ServiceBehaviorAttribute y OperationBehaviorAttribute; aplicándolos a la clase de servicio o implementación de operaciones adecuada. Otros comportamientos, como los objetos ServiceMetadataBehavior o ServiceDebugBehavior, se aplican, normalmente, mediante un archivo de configuración de la aplicación, aunque pueden usarse mediante programación.

Por ejemplo, la publicación de metadatos se configura utilizando el objeto ServiceMetadataBehavior. El siguiente archivo de configuración de la aplicación muestra el uso más común.

<configuration>
  <system.serviceModel>
    <services>
      <service 
        name="Microsoft.WCF.Documentation.SampleService"
        behaviorConfiguration="metadataSupport"
      >
        <host>
          <baseAddresses>
            <add baseAddress="https://localhost:8080/SampleService" />
          </baseAddresses>
        </host>
        <endpoint
          address=""
          binding="wsHttpBinding"
          contract="Microsoft.WCF.Documentation.ISampleService"
        />
        <!-- Adds a WS-MetadataExchange endpoint at -->
        <!-- "https://localhost:8080/SampleService/mex" -->
        <endpoint
           address="mex"
           binding="mexHttpBinding"
           contract="IMetadataExchange"
        />
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
      <behavior name="metadataSupport">
        <!-- Enables the IMetadataExchange endpoint in services that -->
        <!-- use "metadataSupport" in their behaviorConfiguration attribute. -->
        <!-- In addition, the httpGetEnabled and httpGetUrl attributes publish -->
        <!-- Service metadata for retrieval by HTTP/GET at the address -->
        <!-- "https://localhost:8080/SampleService?wsdl" -->
        <serviceMetadata httpGetEnabled="true" httpGetUrl=""/>
      </behavior>
    </serviceBehaviors>
  </behaviors>
  </system.serviceModel>
</configuration>

Las secciones siguientes describen muchos de los comportamientos proporcionados por el sistema más útiles que puede utilizar para modificar la entrega en tiempo de ejecución de su servicio o cliente. Vea el tema de referencia para determinar cómo utilizar cada uno.

Comportamientos de servicio

Los siguientes comportamientos funcionan en servicios.

  • AspNetCompatibilityRequirementsAttribute. Aplicado a un servicio de WCF para indicar si ese servicio puede ejecutarse mediante código de compatibilidad de ASP.NET.

  • ServiceAuthorizationBehavior. Controla cómo autoriza el servicio las notificaciones de cliente.

  • ServiceCredentials. Configura una credencial de servicio. Utilice esta clase para especificar la credencial del servicio, como un certificado X.509.

  • ServiceDebugBehavior. Habilita las características de depuración y de información de Ayuda para un servicio de WCF.

  • ServiceMetadataBehavior. Controla la publicación de metadatos de servicio e información asociada.

  • ServiceSecurityAuditBehavior. Especifica el comportamiento de la auditoría de eventos de seguridad.

  • ServiceThrottlingBehavior. Configura los valores de rendimiento en tiempo de ejecución que le permiten ajustar el rendimiento del servicio.

Comportamientos del extremo

Los siguientes comportamientos funcionan en extremos. Muchos de estos comportamientos se utilizan en aplicaciones de cliente.

  • CallbackBehaviorAttribute. Configura una implementación de servicio de devolución de llamada en una aplicación cliente dúplex.

  • CallbackDebugBehavior. Habilita la depuración de servicio para un objeto de devolución de llamada WCF.

  • ClientCredentials. Permite al usuario configurar las credenciales de cliente y servicio, así como los valores de autenticación de credenciales de servicio para su uso en el cliente.

  • ClientViaBehavior. Utilizado por clientes para especificar el Identificador uniforme de recursos (URI) para el que se debería crear el canal de transporte.

  • MustUnderstandBehavior. Indica a WCF que deshabilite el procesamiento de MustUnderstand.

  • SynchronousReceiveBehavior. Indica al tiempo de ejecución que utilice un proceso de recepción sincrónico para los canales.

  • TransactedBatchingBehavior. Optimiza las operaciones de recepción para los transportes que admiten recepciones transaccionales.

Comportamientos de contrato

DeliveryRequirementsAttribute. Especifica los requisitos de características que los enlaces deben proporcionar al servicio o implementación del cliente.

Comportamientos de la operación

Los siguientes comportamientos de operación especifican los controles de serialización y transacción de las operaciones.

Vea también

Tareas

Cómo controlar la creación de instancias de servicio

Otros recursos

Configuración de servicios