Spécification du comportement du service au moment de l'exécutionSpecifying Service Run-Time Behavior

Une fois que vous avez conçu un contrat de service (Designing Service Contracts) et implémenté votre contrat de service (Implementing Service Contracts), vous pouvez configurer le comportement d’opération de l’exécution du service.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. Cette rubrique traite des comportements de service fournis par le système et des comportements d'opération et précise où rechercher plus d'informations pour créer de nouveaux comportements.This topic discusses system-provided service and operation behaviors and describes where to find more information to create new behaviors. Si certains comportements sont appliqués sous la forme d'attributs, un grand nombre s'appliquent à l'aide d'un fichier de configuration de l'application ou par programme.While some behaviors are applied as attributes, many are applied using an application configuration file or programmatically. Pour plus d’informations sur la configuration de votre application de service, consultez Configuration des services.For more information about configuring your service application, see Configuring Services.

Vue d'ensembleOverview

Le contrat définit les entrées, sorties, types de données et fonctions d'un service de ce type.The contract defines the inputs, outputs, data types, and capabilities of a service of that type. L'implémentation d'un contrat de service crée une classe qui, lorsqu'elle est configurée avec une liaison à une adresse, répond au contrat qu'elle implémente.Implementing a service contract creates a class that, when configured with a binding at an address, fulfills the contract it implements. Les informations contractuelles, de liaisons et d'adresse sont tout connues du client ; sans elles, le client ne peut pas utiliser le service.Contractual, binding, and address information are all known by the client; without them, the client cannot make use of the service.

Toutefois, les caractéristiques d'opération, telles que les problèmes de thread ou la gestion d'instance, sont opaques aux clients.However, operation specifics, such as threading issues or instance management, are opaque to clients. Une fois que vous avez implémenté votre contrat de service, vous pouvez configurer un grand nombre de caractéristiques d'opération à l'aide des comportements.Once you have implemented your service contract, you can configure a large number of operation characteristics by using behaviors. Les comportements sont des objets qui modifient le runtime Windows Communication Foundation (WCF) en définissant une propriété d’exécution ou en insérant un type de personnalisation dans le Runtime.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. Pour plus d’informations sur la modification du runtime en créant des comportements définis par l’utilisateur, consultez extension de ServiceHost et de la couche de modèle de service.For more information about modifying the runtime by creating user-defined behaviors, see Extending ServiceHost and the Service Model Layer.

Les attributs System.ServiceModel.ServiceBehaviorAttribute et System.ServiceModel.OperationBehaviorAttribute sont les comportements le plus largement utiles et qui exposent les fonctionnalités d'opération les plus couramment demandées.The System.ServiceModel.ServiceBehaviorAttribute and System.ServiceModel.OperationBehaviorAttribute attributes are the most widely useful behaviors and expose the most commonly requested operation features. Comme ce sont des attributs, vous les appliquez à l'implémentation de service ou d'opération.Because they are attributes, you apply them to the service or operation implementation. Les autres comportements, tels que System.ServiceModel.Description.ServiceMetadataBehavior ou System.ServiceModel.Description.ServiceDebugBehavior, sont appliqués en général à l'aide d'un fichier de configuration de l'application, bien que vous puissiez les utiliser par programme.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.

Cette rubrique fournit une vue d’ensemble des attributs ServiceBehaviorAttribute et OperationBehaviorAttribute, décrit les différentes étendues au niveau desquelles les comportements peuvent fonctionner, et fournit une description rapide d’un grand nombre des comportements fournis par le système aux diverses étendues qui peuvent présenter un intérêt pour WCF. les développeurs.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 et OperationBehaviorAttributeServiceBehaviorAttribute and OperationBehaviorAttribute

Les comportements les plus importants sont les attributs ServiceBehaviorAttribute et OperationBehaviorAttribute que vous pouvez utiliser pour contrôler :The most important behaviors are the ServiceBehaviorAttribute and OperationBehaviorAttribute attributes, which you can use to control:

  • Durées de vie d'instanceInstance lifetimes

  • Prise en charge multi-utilisateur et de synchronisationConcurrency and synchronization support

  • Comportement de configurationConfiguration behavior

  • Comportement de transactionTransaction behavior

  • Comportements de sérialisationSerialization behavior

  • Transformation de métadonnéesMetadata transformation

  • Durée de vie de sessionSession lifetime

  • Filtrage d'adresse et traitement d'en-têteAddress filtering and header processing

  • Emprunt d'identitéImpersonation

  • Pour utiliser ces attributs, marquez l'implémentation de service ou d'opération avec l'attribut approprié à cette étendue et définissez les propriétés.To use these attributes, mark the service or operation implementation with the attribute appropriate to that scope and set the properties. Par exemple, l'exemple de code suivant affiche une implémentation d'opération qui utilise la propriété OperationBehaviorAttribute.Impersonation pour exiger que les appelants de cette opération prennent en charge l'emprunt d'identité.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

Un grand nombre des propriétés exigent la prise en charge supplémentaire à partir de la liaison.Many of the properties require additional support from the binding. Par exemple, une opération qui requiert une transaction à partir du client doit être configurée pour utiliser une liaison qui prend en charge les transactions transmises.For example, an operation that requires a transaction from the client must be configured to use a binding that supports flowed transactions.

Services singleton connusWell-Known Singleton Services

Vous pouvez utiliser les attributs ServiceBehaviorAttribute et OperationBehaviorAttribute pour contrôler certaines durées de vie, les deux InstanceContext et des objets de service qui implémentent les opérations.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.

Par exemple, la propriété ServiceBehaviorAttribute.InstanceContextMode contrôle la fréquence à laquelle InstanceContext est diffusé, et les propriétés OperationBehaviorAttribute.ReleaseInstanceMode et ServiceBehaviorAttribute.ReleaseServiceInstanceOnTransactionComplete contrôlent le moment auquel l'objet de service est diffusé.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.

Toutefois, vous pouvez également créer un objet de service vous-même et créer l'hôte de service utilisant cet objet.However, you can also create a service object yourself and create the service host using that object. Pour ce faire, vous devez également affecter ServiceBehaviorAttribute.InstanceContextMode à la propriété Single , sans quoi une exception est levée lorsque l'hôte de service est ouvert.To do so, you must also set the ServiceBehaviorAttribute.InstanceContextMode property to Single or an exception is thrown when the service host is opened.

Utilisez le constructeur ServiceHost.ServiceHost(Object, Uri[]) pour créer un service de ce type.Use the ServiceHost.ServiceHost(Object, Uri[]) constructor to create such a service. Il fournit une alternative à l'implémentation d'un System.ServiceModel.Dispatcher.IInstanceContextInitializer personnalisé lorsque vous souhaitez fournir une instance d'objet spécifique qui sera utilisée par un service 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. Vous pouvez utiliser cette surcharge lorsque votre type d’implémentation de service est difficile à construire (par exemple, s’il n’implémente pas de constructeur public sans paramètre).You can use this overload when your service implementation type is difficult to construct (for example, if it does not implement a parameterless public constructor).

Notez que lorsqu’un objet est fourni à ce constructeur, certaines fonctionnalités liées au comportement d’instanciation Windows Communication Foundation (WCF) fonctionnent différemment.Note that when an object is provided to this constructor, some features related to the Windows Communication Foundation (WCF) instancing behavior work differently. Par exemple, l'appel de InstanceContext.ReleaseServiceInstance n'a aucun effet lorsqu'une instance d'objet connue est fournie.For example, calling InstanceContext.ReleaseServiceInstance has no effect when a well-known object instance is provided. De même, tout autre mécanisme de libération d'instance est ignoré.Similarly, any other instance release mechanism is ignored. La classe ServiceHost se comporte toujours comme si la propriété OperationBehaviorAttribute.ReleaseInstanceMode avait la valeur ReleaseInstanceMode.None pour toutes les opérations.The ServiceHost class always behaves as if the OperationBehaviorAttribute.ReleaseInstanceMode property is set to ReleaseInstanceMode.None for all operations.

Autres comportements de service, de point de terminaison, de contrat et d'opérationOther Service, Endpoint, Contract, and Operation Behaviors

Les comportements de service, tels que l'attribut ServiceBehaviorAttribute , fonctionnent sur l'ensemble d'un service.Service behaviors, such as the ServiceBehaviorAttribute attribute, operate across an entire service. Par exemple, si vous affectez à la propriété ServiceBehaviorAttribute.ConcurrencyMode la valeur ConcurrencyMode.Multiple , vous devez gérer vous-même les problèmes de synchronisation de thread à l'intérieur de chaque opération dans ce service.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. Les comportements de point de terminaison fonctionnent sur un point de terminaison ; un grand nombre des comportements de point de terminaison fournis par le système sont destinés aux fonctionnalités clientes.Endpoint behaviors operate across an endpoint; many of the system-provided endpoint behaviors are for client functionality. Les comportements de contrat fonctionnent au niveau du contrat, et les comportements d'opération modifient la remise d'opération.Contract behaviors operate at the contract level, and operation behaviors modify operation delivery.

Un grand nombre de ces comportements sont implémentés sur les attributs, et sont utilisés comme les attributs ServiceBehaviorAttribute et OperationBehaviorAttribute , en les appliquant à l'implémentation d'opération ou de classe de service appropriée.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. Les autres comportements, tels que les objets ServiceMetadataBehavior ou ServiceDebugBehavior , sont appliqués en général à l'aide d'un fichier de configuration de l'application, bien que vous puissiez les utiliser par programme.Other behaviors, such as the ServiceMetadataBehavior or ServiceDebugBehavior objects, are typically applied using an application configuration file, although they can also be used programmatically.

Par exemple, la publication de métadonnées est configurée en utilisant l'objet ServiceMetadataBehavior .For example, the publication of metadata is configured by using the ServiceMetadataBehavior object. Le fichier de configuration de l'application suivant illustre l'utilisation la plus courante.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>

Les sections suivantes décrivent un grand nombre des comportements les plus utiles fournis par le système que vous pouvez utiliser pour modifier la remise d'exécution de votre service ou client.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. Consultez la rubrique de référence pour déterminer comment utiliser chacun d'entre eux.See the reference topic to determine how to use each one.

Comportements de serviceService Behaviors

Les comportements suivants fonctionnent sur les services.The following behaviors operate on services.

Comportements de point de terminaisonEndpoint Behaviors

Les comportements suivants fonctionnent sur des points de terminaison.The following behaviors operate on endpoints. Un grand nombre de ces comportements sont utilisés dans les applications clientes.Many of these behaviors are used in client applications.

  • CallbackBehaviorAttribute.,CallbackBehaviorAttribute. Configure une implémentation de service de rappel dans une application cliente duplex.Configures a callback service implementation in a duplex client application.

  • CallbackDebugBehavior.,CallbackDebugBehavior. Active le débogage de service pour un objet de rappel WCF.Enables service debugging for a WCF callback object.

  • ClientCredentials.,ClientCredentials. Permet à l'utilisateur de configurer les informations d'identification de service et de client ainsi que paramètres d'authentification des informations d'identification de service à utiliser sur le client.Allows the user to configure client and service credentials as well as service credential authentication settings for use on the client.

  • ClientViaBehavior.,ClientViaBehavior. Utilisé par les clients pour spécifier l'URI (Uniform Resource Identifier) pour lequel le canal de transport doit être créé.Used by clients to specify the Uniform Resource Identifier (URI) for which the transport channel should be created.

  • MustUnderstandBehavior.,MustUnderstandBehavior. Indique à WCF de désactiver le traitement MustUnderstand.Instructs WCF to disable the MustUnderstand processing.

  • SynchronousReceiveBehavior.,SynchronousReceiveBehavior. Indique à l'exécution d'utiliser un processus de réception synchrone pour les canaux.Instructs the runtime to use a synchronous receive process for channels.

  • TransactedBatchingBehavior.,TransactedBatchingBehavior. Optimise les opérations de réception pour les transports qui prennent en charge les réceptions transactionnelles.Optimizes the receive operations for transports that support transactional receives.

Comportements de contratContract Behaviors

DeliveryRequirementsAttribute.,DeliveryRequirementsAttribute. Spécifie les fonctionnalités que les liaisons doivent fournir à l'implémentation de service ou de client.Specifies the feature requirements that bindings must provide to the service or client implementation.

Comportements d'opérationOperation Behaviors

Les comportements d'opération suivants spécifient les contrôles de sérialisation et de transaction pour les opérations.The following operation behaviors specify serialization and transaction controls for operations.

Voir aussiSee also