Especificación del comportamiento en tiempo de ejecución del servicioSpecifying Service Run-Time Behavior

Una vez que haya diseñado un contrato de servicios (Designing Service Contracts) y haya implementado su contrato de servicios (Implementing Service Contracts), puede configurar el comportamiento de la operación del tiempo de ejecución del servicio.Once you have designed a service contract (Designing Service Contracts) and implemented your service contract (Implementing Service Contracts) you can configure the operation behavior of the service runtime. En este tema se tratan los comportamientos de operaciones y servicios proporcionados por el sistema y se describe dónde encontrar más información para crear nuevos comportamientos.This topic discusses system-provided service and operation behaviors and describes where to find more information to create new behaviors. Aunque algunos comportamientos se aplican como atributos, muchos se aplican usando un archivo de configuración de la aplicación o mediante programación.While some behaviors are applied as attributes, many are applied using an application configuration file or programmatically. Para obtener más información sobre la configuración de la aplicación de servicio, consulte configuración de servicios.For more information about configuring your service application, see Configuring Services.

Información generalOverview

El contrato define las entradas, las salidas, los tipos de datos y las características de un servicio de ese tipo.The contract defines the inputs, outputs, data types, and capabilities of a service of that type. 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.Implementing a service contract creates a class that, when configured with a binding at an address, fulfills the contract it implements. El cliente conoce la información contractual, de enlace y dirección; sin esa información, el cliente no puede utilizar el servicio.Contractual, binding, and address information are all known by the client; without them, the client cannot make use of the service.

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.However, operation specifics, such as threading issues or instance management, are opaque to clients. Cuando haya implementado su contrato de servicios, puede configurar un gran número de características de operaciones utilizando los comportamientos.Once you have implemented your service contract, you can configure a large number of operation characteristics by using behaviors. 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.Behaviors are objects that modify the Windows Communication Foundation (WCF) runtime by either setting a runtime property or by inserting a customization type into the runtime. Para obtener más información sobre cómo modificar el tiempo de ejecución creando comportamientos definidos por el usuario, consulte extensión de ServiceHost y la capa de modelo de servicio.For more information about modifying the runtime by creating user-defined behaviors, see Extending ServiceHost and the Service Model Layer.

Los atributos System.ServiceModel.ServiceBehaviorAttribute y System.ServiceModel.OperationBehaviorAttribute son los comportamientos más útiles y exponen las funciones de operaciones más solicitadas.The System.ServiceModel.ServiceBehaviorAttribute and System.ServiceModel.OperationBehaviorAttribute attributes are the most widely useful behaviors and expose the most commonly requested operation features. Puesto que son atributos, se han de aplicar a la implementación de la operación o el servicio.Because they are attributes, you apply them to the service or operation implementation. 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.Other behaviors, such as the System.ServiceModel.Description.ServiceMetadataBehavior or System.ServiceModel.Description.ServiceDebugBehavior, are typically applied using an application configuration file, although you can use them programmatically.

En este tema se proporciona información general sobre los atributos ServiceBehaviorAttribute y OperationBehaviorAttribute, se describen los diversos ámbitos en los que pueden funcionar los comportamientos y se 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 WCF. Developer.This topic provides an overview of the ServiceBehaviorAttribute and OperationBehaviorAttribute attributes, describes the various scopes at which behaviors can operate, and provides a quick description of many of the system-provided behaviors at the various scopes that may be of interest to WCF developers.

ServiceBehaviorAttribute y OperationBehaviorAttributeServiceBehaviorAttribute and OperationBehaviorAttribute

Los comportamientos más importantes son los atributos ServiceBehaviorAttribute y OperationBehaviorAttribute , que puede utilizar para controlar:The most important behaviors are the ServiceBehaviorAttribute and OperationBehaviorAttribute attributes, which you can use to control:

  • La duración de las instanciasInstance lifetimes

  • La compatibilidad con respecto a la simultaneidad y la sincronizaciónConcurrency and synchronization support

  • Comportamiento de configuraciónConfiguration behavior

  • Comportamiento de transacciónTransaction behavior

  • Comportamiento de serializaciónSerialization behavior

  • Transformación de metadatosMetadata transformation

  • Duración de sesiónSession lifetime

  • Filtrado de direcciones y procesamiento de encabezadosAddress filtering and header processing

  • suplantaciónImpersonation

  • 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.To use these attributes, mark the service or operation implementation with the attribute appropriate to that scope and set the properties. Por ejemplo, el siguiente ejemplo de código muestra una implementación de la operación que utiliza la propiedad OperationBehaviorAttribute.Impersonation para requerir que los llamadores de esta operación admitan la suplantación.For example, the following code example shows an operation implementation that uses the OperationBehaviorAttribute.Impersonation property to require that callers of this operation support impersonation.

using System;
using System.Collections.Generic;
using System.ServiceModel;
using System.Threading;

namespace Microsoft.WCF.Documentation
{
  [ServiceContract(
    Name="SampleHello",
    Namespace="http://microsoft.wcf.documentation"
  )]
  public interface IHello
  {
    [OperationContract]
    string Hello(string greeting);
  }

  public class HelloService : IHello
  {

    public HelloService()
    {
      Console.WriteLine("Service object created: " + this.GetHashCode().ToString());
    }

    ~HelloService()
    {
      Console.WriteLine("Service object destroyed: " + this.GetHashCode().ToString());
    }

    [OperationBehavior(Impersonation=ImpersonationOption.Required)]
    public string Hello(string greeting)
    {
      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;
    }
  }
}
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.Many of the properties require additional support from the binding. 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.For example, an operation that requires a transaction from the client must be configured to use a binding that supports flowed transactions.

Servicios conocidos singletonWell-Known Singleton Services

Puede utilizar los atributos ServiceBehaviorAttribute y OperationBehaviorAttribute para controlar ciertas duraciones, de InstanceContext y de los objetos de servicio que implementan las operaciones.You can use the ServiceBehaviorAttribute and OperationBehaviorAttribute attributes to control certain lifetimes, both of the InstanceContext and of the service objects that implement the operations.

Por ejemplo, la propiedad ServiceBehaviorAttribute.InstanceContextMode controla con qué frecuencia se libera el InstanceContext , y las propiedades OperationBehaviorAttribute.ReleaseInstanceMode y ServiceBehaviorAttribute.ReleaseServiceInstanceOnTransactionComplete controlan cuando se libera el objeto de servicios.For example, the ServiceBehaviorAttribute.InstanceContextMode property controls how often the InstanceContext is released, and the OperationBehaviorAttribute.ReleaseInstanceMode and ServiceBehaviorAttribute.ReleaseServiceInstanceOnTransactionComplete properties control when the service object is released.

Sin embargo, también puede crear un objeto de servicio y crear el host de servicio mediante ese objeto.However, you can also create a service object yourself and create the service host using that object. Para hacerlo, debe establecer también la propiedad ServiceBehaviorAttribute.InstanceContextMode en Single o se producirá una excepción al abrir el host del servicio.To do so, you must also set the ServiceBehaviorAttribute.InstanceContextMode property to Single or an exception is thrown when the service host is opened.

Utilice el constructor ServiceHost.ServiceHost(Object, Uri[]) para crear este tipo de servicio.Use the ServiceHost.ServiceHost(Object, Uri[]) constructor to create such a service. 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.It provides an alternative to implementing a custom System.ServiceModel.Dispatcher.IInstanceContextInitializer when you wish to provide a specific object instance for use by a singleton service. 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).You can use this overload when your service implementation type is difficult to construct (for example, if it does not implement a default public constructor that has no parameters).

Tenga en cuenta que cuando se proporciona un objeto a este constructor, algunas características relacionadas con el comportamiento de la creación de instancias de Windows Communication Foundation (WCF) funcionan de manera diferente.Note that when an object is provided to this constructor, some features related to the Windows Communication Foundation (WCF) instancing behavior work differently. Por ejemplo, llamar a InstanceContext.ReleaseServiceInstance , no tiene ningún efecto cuando se proporciona una instancia de objeto conocida.For example, calling InstanceContext.ReleaseServiceInstance has no effect when a well-known object instance is provided. De igual forma, se omite cualquier otro mecanismo de lanzamiento de instancia.Similarly, any other instance release mechanism is ignored. La clase ServiceHost siempre se comporta como si la propiedad OperationBehaviorAttribute.ReleaseInstanceMode se hubiese establecido en ReleaseInstanceMode.None para todas las operaciones.The ServiceHost class always behaves as if the OperationBehaviorAttribute.ReleaseInstanceMode property is set to ReleaseInstanceMode.None for all operations.

Otros comportamientos de servicio, extremo, contrato y operaciónOther Service, Endpoint, Contract, and Operation Behaviors

Los comportamientos de servicios, como el atributo ServiceBehaviorAttribute , funcionan en a lo largo de todo un servicio.Service behaviors, such as the ServiceBehaviorAttribute attribute, operate across an entire service. Por ejemplo, si establece la propiedad ServiceBehaviorAttribute.ConcurrencyMode en ConcurrencyMode.Multiple debe administrar usted mismo los problemas de sincronización de subprocesos dentro de cada operación de ese servicio.For example, if you set the ServiceBehaviorAttribute.ConcurrencyMode property to ConcurrencyMode.Multiple you must handle thread synchronization issues inside each operation in that service yourself. 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.Endpoint behaviors operate across an endpoint; many of the system-provided endpoint behaviors are for client functionality. Los comportamientos de contratos funcionan en el nivel del contrato y los comportamientos de operaciones modifican la entrega de la operación.Contract behaviors operate at the contract level, and operation behaviors modify operation delivery.

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.Many of these behaviors are implemented on attributes, and you make use of them as you do the ServiceBehaviorAttribute and OperationBehaviorAttribute attributes—by applying them to the appropriate service class or operation implementation. 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.Other behaviors, such as the ServiceMetadataBehavior or ServiceDebugBehavior objects, are typically applied using an application configuration file, although they can also be used programmatically.

Por ejemplo, la publicación de metadatos se configura utilizando el objeto ServiceMetadataBehavior .For example, the publication of metadata is configured by using the ServiceMetadataBehavior object. El siguiente archivo de configuración de la aplicación muestra el uso más común.The following application configuration file shows the most common usage.

<configuration>
  <system.serviceModel>
    <services>
      <service 
        name="Microsoft.WCF.Documentation.SampleService"
        behaviorConfiguration="metadataSupport"
      >
        <host>
          <baseAddresses>
            <add baseAddress="http://localhost:8080/SampleService" />
          </baseAddresses>
        </host>
        <endpoint
          address=""
          binding="wsHttpBinding"
          contract="Microsoft.WCF.Documentation.ISampleService"
        />
        <!-- Adds a WS-MetadataExchange endpoint at -->
        <!-- "http://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 -->
        <!-- "http://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.The following sections describe many of the most useful system-provided behaviors that you can use to modify the runtime delivery of your service or client. Vea el tema de referencia para determinar cómo utilizar cada uno.See the reference topic to determine how to use each one.

Comportamientos de servicioService Behaviors

Los siguientes comportamientos funcionan en servicios.The following behaviors operate on services.

Comportamientos del extremoEndpoint Behaviors

Los siguientes comportamientos funcionan en extremos.The following behaviors operate on endpoints. Muchos de estos comportamientos se utilizan en aplicaciones de cliente.Many of these behaviors are used in client applications.

  • CallbackBehaviorAttributeOperadorCallbackBehaviorAttribute. Configura una implementación de servicio de devolución de llamada en una aplicación cliente dúplex.Configures a callback service implementation in a duplex client application.

  • CallbackDebugBehaviorOperadorCallbackDebugBehavior. Habilita la depuración del servicio para un objeto de devolución de llamada de WCF.Enables service debugging for a WCF callback object.

  • ClientCredentialsOperadorClientCredentials. 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.Allows the user to configure client and service credentials as well as service credential authentication settings for use on the client.

  • ClientViaBehaviorOperadorClientViaBehavior. Utilizado por clientes para especificar el Identificador uniforme de recursos (URI) para el que se debería crear el canal de transporte.Used by clients to specify the Uniform Resource Identifier (URI) for which the transport channel should be created.

  • MustUnderstandBehaviorOperadorMustUnderstandBehavior. Indica a WCF que deshabilite el procesamiento de MustUnderstand.Instructs WCF to disable the MustUnderstand processing.

  • SynchronousReceiveBehaviorOperadorSynchronousReceiveBehavior. Indica al tiempo de ejecución que utilice un proceso de recepción sincrónico para los canales.Instructs the runtime to use a synchronous receive process for channels.

  • TransactedBatchingBehaviorOperadorTransactedBatchingBehavior. Optimiza las operaciones de recepción para los transportes que admiten recepciones transaccionales.Optimizes the receive operations for transports that support transactional receives.

Comportamientos de contratoContract Behaviors

DeliveryRequirementsAttributeOperadorDeliveryRequirementsAttribute. Especifica los requisitos de características que los enlaces deben proporcionar al servicio o implementación del cliente.Specifies the feature requirements that bindings must provide to the service or client implementation.

Comportamientos de la operaciónOperation Behaviors

Los siguientes comportamientos de operación especifican los controles de serialización y transacción de las operaciones.The following operation behaviors specify serialization and transaction controls for operations.

Vea tambiénSee also