Partager via


ServiceBehaviorAttribute Classe

Définition

Spécifie le comportement d'exécution interne d'une implémentation de contrat de service.

public ref class ServiceBehaviorAttribute sealed : Attribute, System::ServiceModel::Description::IServiceBehavior
[System.AttributeUsage(System.AttributeTargets.Class)]
public sealed class ServiceBehaviorAttribute : Attribute, System.ServiceModel.Description.IServiceBehavior
[<System.AttributeUsage(System.AttributeTargets.Class)>]
type ServiceBehaviorAttribute = class
    inherit Attribute
    interface IServiceBehavior
Public NotInheritable Class ServiceBehaviorAttribute
Inherits Attribute
Implements IServiceBehavior
Héritage
ServiceBehaviorAttribute
Attributs
Implémente

Exemples

L'exemple de code suivant illustre les propriétés ServiceBehaviorAttribute. La classe BehaviorService utilise l'attribut ServiceBehaviorAttribute pour indiquer que :

  • L'objet du service est recyclé au terme de la transaction.

  • Il existe un objet du service pour chaque session.

  • Le service est monothread et ne prend pas en charge les appels réentrants.

En outre, au niveau de l’opération, les valeurs OperationBehaviorAttribute indiquent que la méthode TxWork s’inscrit automatiquement dans les transactions passées ou crée une transaction pour faire le travail, et que la transaction est validée automatiquement si aucune exception non gérée ne se produit.

using System;
using System.ServiceModel;
using System.Transactions;

namespace Microsoft.WCF.Documentation
{
  [ServiceContract(
    Namespace="http://microsoft.wcf.documentation",
    SessionMode=SessionMode.Required
  )]
  public interface IBehaviorService
  {
    [OperationContract]
    string TxWork(string message);
  }

  // Note: To use the TransactionIsolationLevel property, you
  // must add a reference to the System.Transactions.dll assembly.
  /* The following service implementation:
   *   -- Processes messages on one thread at a time
   *   -- Creates one service object per session
   *   -- Releases the service object when the transaction commits
   */
  [ServiceBehavior(
    ConcurrencyMode=ConcurrencyMode.Single,
    InstanceContextMode=InstanceContextMode.PerSession,
    ReleaseServiceInstanceOnTransactionComplete=true
  )]
  public class BehaviorService : IBehaviorService, IDisposable
  {
    Guid myID;

    public BehaviorService()
    {
      myID = Guid.NewGuid();
      Console.WriteLine(
        "Object "
        + myID.ToString()
        + " created.");
    }

    /*
     * The following operation-level behaviors are specified:
     *   -- The executing transaction is committed when
     *        the operation completes without an
     *        unhandled exception
     *   -- Always executes under a flowed transaction.
     */
    [OperationBehavior(
      TransactionAutoComplete = true,
      TransactionScopeRequired = true
    )]
    [TransactionFlow(TransactionFlowOption.Mandatory)]
    public string TxWork(string message)
    {
      // Do some transactable work.
      Console.WriteLine("TxWork called with: " + message);
      // Display transaction information.

      TransactionInformation info = Transaction.Current.TransactionInformation;
      Console.WriteLine("The distributed tx ID: {0}.", info.DistributedIdentifier);
      Console.WriteLine("The tx status: {0}.", info.Status);
      return String.Format("Hello. This was object {0}.",myID.ToString()) ;
    }

    public void Dispose()
    {
      Console.WriteLine(
        "Service "
        + myID.ToString()
        + " is being recycled."
      );
    }
  }
}
Imports System.ServiceModel
Imports System.Transactions

Namespace Microsoft.WCF.Documentation
  <ServiceContract(Namespace:="http://microsoft.wcf.documentation", SessionMode:=SessionMode.Required)> _
  Public Interface IBehaviorService
    <OperationContract> _
    Function TxWork(ByVal message As String) As String
  End Interface

  ' Note: To use the TransactionIsolationLevel property, you 
  ' must add a reference to the System.Transactions.dll assembly.
'   The following service implementation:
'   *   -- Processes messages on one thread at a time
'   *   -- Creates one service object per session
'   *   -- Releases the service object when the transaction commits
'   
    <ServiceBehavior(ConcurrencyMode:=ConcurrencyMode.Single, InstanceContextMode:=InstanceContextMode.PerSession, _
                     ReleaseServiceInstanceOnTransactionComplete:=True)> _
    Public Class BehaviorService
        Implements IBehaviorService, IDisposable
        Private myID As Guid

        Public Sub New()
            myID = Guid.NewGuid()
            Console.WriteLine("Object " & myID.ToString() & " created.")
        End Sub

        '    
        '     * The following operation-level behaviors are specified:
        '     *   -- The executing transaction is committed when
        '     *        the operation completes without an 
        '     *        unhandled exception
        '     *   -- Always executes under a flowed transaction.
        '     
        <OperationBehavior(TransactionAutoComplete:=True, TransactionScopeRequired:=True), TransactionFlow(TransactionFlowOption.Mandatory)> _
        Public Function TxWork(ByVal message As String) As String Implements IBehaviorService.TxWork
            ' Do some transactable work.
            Console.WriteLine("TxWork called with: " & message)
            ' Display transaction information.

            Dim info As TransactionInformation = Transaction.Current.TransactionInformation
            Console.WriteLine("The distributed tx ID: {0}.", info.DistributedIdentifier)
            Console.WriteLine("The tx status: {0}.", info.Status)
            Return String.Format("Hello. This was object {0}.", myID.ToString())
        End Function

        Public Sub Dispose() Implements IDisposable.Dispose
            Console.WriteLine("Service " & myID.ToString() & " is being recycled.")
        End Sub
    End Class
End Namespace

La liaison sous-jacente doit prendre en charge les transactions passées pour l'exemple de code suivant pour s'exécuter correctement. Pour prendre en charge les transactions passées à l'aide de WSHttpBinding, par exemple, affectez la valeur TransactionFlow à la propriété true dans le code ou dans un fichier de configuration de l'application. L'exemple de code suivant montre le fichier de configuration pour l'exemple précédent :

<configuration>
  <system.serviceModel>
    <services>
      <service  
        name="Microsoft.WCF.Documentation.BehaviorService" 
        behaviorConfiguration="metadataAndDebugEnabled"
      >
        <host>
          <baseAddresses>
            <add baseAddress="http://localhost:8080/SampleService"/>
          </baseAddresses>
        </host>
        <!--
          Note:
            This example code uses the WSHttpBinding to support transactions using the 
            WS-AtomicTransactions (WS-AT) protocol. WSHttpBinding is configured to use the  
            protocol, but the protocol is not enabled on some computers. Use the xws_reg -wsat+ 
            command to enable the WS-AtomicTransactions protocol in the MSDTC service.          
          -->
        <endpoint 
           contract="Microsoft.WCF.Documentation.IBehaviorService"
           binding="wsHttpBinding"
           bindingConfiguration="wsHttpBindingWithTXFlow"
           address="http://localhost:8080/BehaviorService"
          />
        <endpoint 
           contract="Microsoft.WCF.Documentation.IBehaviorService"
           binding="netTcpBinding"
           bindingConfiguration="netTcpBindingWithTXFlow"
           address="net.tcp://localhost:8081/BehaviorService"
          />
        <endpoint
          address="mex"
          binding="mexHttpBinding"
          contract="IMetadataExchange"
        />
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior name="metadataAndDebugEnabled">
          <serviceDebug
            includeExceptionDetailInFaults="true"
          />
          <serviceMetadata
            httpGetEnabled="true"
            httpGetUrl=""
          />
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <!-- binding configuration - configures a WSHttpBinding to require transaction flow -->
    <bindings>
      <wsHttpBinding>
        <binding name="wsHttpBindingWithTXFlow" transactionFlow="true" />
      </wsHttpBinding>
      <netTcpBinding>
        <binding name="netTcpBindingWithTXFlow" transactionFlow="true" />
      </netTcpBinding>
    </bindings>
  </system.serviceModel>
</configuration>

Remarques

Appliquez l'attribut ServiceBehaviorAttribute à une implémentation de service afin de spécifier le comportement d'exécution à l'échelle du service. (Pour spécifier le comportement d’exécution au niveau de la méthode, utilisez l’attribut OperationBehaviorAttribute .) Cet attribut ne peut être appliqué qu’aux implémentations de service. Pour obtenir des exemples de travail, consultez Service : Exemples de comportements.

ServiceBehaviorAttribute les propriétés sont une fonctionnalité de modèle de programmation Windows Communication Foundation (WCF) qui permet d’implémenter des fonctionnalités courantes que les développeurs doivent implémenter. Pour plus d’informations sur ces comportements et d’autres, consultez Spécification du comportement du service Run-Time. Pour plus d’informations sur les propriétés d’exécution sous-jacentes définies par certaines des propriétés suivantes, consultez Extension de ServiceHost et de la couche de modèle de service.

  • La propriété AddressFilterMode spécifie le type de filtre utilisé par le système de répartiteur pour localiser le point de terminaison qui gère des demandes.

  • La propriété AutomaticSessionShutdown ferme automatiquement la session lorsque le canal est fermé et que le service a fini de traiter les messages restants.

  • La propriété ConcurrencyMode contrôle le modèle de thread interne et permet ainsi la prise en charge des services réentrants ou multithread.

  • La propriété ConfigurationName est utilisée pour déclarer un nom en vue de son utilisation dans l'attribut name de l'élément <service> dans un fichier de configuration.

  • La propriété IgnoreExtensionDataObject permet au temps d'exécution d'ignorer les informations de sérialisation supplémentaires qui ne sont pas requises pour le traitement du message.

  • La propriété IncludeExceptionDetailInFaults détermine si les exceptions non gérées dans un service sont retournées en tant qu'erreurs SOAP. Elle est utilisée à des fins de débogage uniquement.

  • La propriété InstanceContextMode spécifie si et quand les services et leurs objets du service sont recyclés pendant un échange avec un client.

  • La propriété MaxItemsInObjectGraph limite le nombre d'éléments sérialisés dans un graphique d'objets.

  • Les propriétés Name et Namespace contrôlent le nom et l'espace de noms de l'expression WSDL de l'élément de service.

  • La propriété ReleaseServiceInstanceOnTransactionComplete spécifie si l’objet de service est recyclé au terme de l’exécution d’une transaction.

  • La propriété TransactionAutoCompleteOnSessionClose spécifie si les transactions en attente sont exécutées lorsque la session se ferme.

  • La propriété TransactionIsolationLevel spécifie le niveau d'isolation de la transaction que le contrat prend en charge.

  • La propriété TransactionTimeout spécifie le délai au cours duquel une transaction doit être exécutée, faute de quoi elle sera abandonnée.

  • La propriété UseSynchronizationContext spécifie si les appels de méthode entrants doivent être automatiquement synchronisés avec le thread d’interface utilisateur.

  • La propriété ValidateMustUnderstand informe le système s'il doit confirmer que les en-têtes SOAP marqués comme MustUnderstand ont effectivement été compris.

La propriété IncludeExceptionDetailInFaults peut également être définie à l'aide d'un fichier de configuration de l'application. Pour plus d'informations, consultez IncludeExceptionDetailInFaults.

Constructeurs

ServiceBehaviorAttribute()

Initialise une nouvelle instance de la classe ServiceBehaviorAttribute.

Propriétés

AddressFilterMode

Obtient ou définit la propriété AddressFilterMode utilisée par le répartiteur afin de router les messages entrants vers le point de terminaison correct.

AutomaticSessionShutdown

Spécifie si une session doit être fermée automatiquement lorsqu'un client ferme une session de sortie.

ConcurrencyMode

Obtient ou définit si un service prend en charge un thread, plusieurs threads ou des appels réentrants.

ConfigurationName

Obtient ou définit la valeur utilisée pour localiser l'élément de service dans un fichier de configuration de l'application.

EnsureOrderedDispatch

Obtient ou définit une valeur qui indique si la distribution classée par service est garantie.

IgnoreExtensionDataObject

Obtient ou définit une valeur indiquant si des données de sérialisation inconnues doivent être envoyées sur le réseau.

IncludeExceptionDetailInFaults

Obtient ou définit une valeur qui indique que les exceptions d'exécution générales non prises en charge doivent être converties en FaultException<TDetail> de type ExceptionDetail et envoyées en tant que message d'erreur. Affectez la valeur true uniquement lors du développement afin de dépanner un service.

InstanceContextMode

Obtient ou définit la valeur qui indique à quel moment de nouveaux objets de service sont créés.

MaxItemsInObjectGraph

Obtient ou définit le nombre maximal d'éléments autorisés dans un objet sérialisé.

Name

Obtient ou définit la valeur de l'attribut du nom correspondant à l'élément de service dans l'outil relatif au langage descriptif de services Web (WSDL, Web Services Description Language).

Namespace

Obtient ou définit la valeur de l'espace de noms cible correspondant au service dans WSDL (Web Services Description Language).

ReleaseServiceInstanceOnTransactionComplete

Obtient ou définit une valeur qui spécifie si l'objet du service est libéré au terme de la transaction actuelle.

TransactionAutoCompleteOnSessionClose

Obtient ou définit une valeur qui spécifie si les transactions en attente sont exécutées lorsque la session active se ferme sans erreur.

TransactionIsolationLevel

Spécifie le niveau d'isolation des nouvelles transactions créées à l'intérieur du service et des transactions entrantes transmises à partir d'un client.

TransactionTimeout

Obtient ou définit la période au cours de laquelle une transaction doit se terminer.

TypeId

Lors de l'implémentation dans une classe dérivée, obtient un identificateur unique pour l'objet Attribute.

(Hérité de Attribute)
UseSynchronizationContext

Obtient ou définit une valeur qui spécifie si le contexte de synchronisation actuel doit être utilisé pour sélectionner le thread d’exécution.

ValidateMustUnderstand

Obtient ou définit une valeur qui spécifie si le système ou l'application applique le traitement d'en-tête MustUnderstand SOAP.

Méthodes

Equals(Object)

Retourne une valeur qui indique si cette instance est égale à un objet spécifié.

(Hérité de Attribute)
GetHashCode()

Retourne le code de hachage de cette instance.

(Hérité de Attribute)
GetType()

Obtient le Type de l'instance actuelle.

(Hérité de Object)
GetWellKnownSingleton()

Récupère un objet qui implémente le service et qui est utilisé comme instance singleton du service, ou null s'il n'existe aucune instance de singleton.

IsDefaultAttribute()

En cas de substitution dans une classe dérivée, indique si la valeur de cette instance est la valeur par défaut pour la classe dérivée.

(Hérité de Attribute)
Match(Object)

En cas de substitution dans une classe dérivée, retourne une valeur indiquant si cette instance équivaut à un objet spécifié.

(Hérité de Attribute)
MemberwiseClone()

Crée une copie superficielle du Object actuel.

(Hérité de Object)
SetWellKnownSingleton(Object)

Spécifie un objet qui implémente le service et qui est utilisé comme instance singleton du service.

ShouldSerializeConfigurationName()

Retourne une valeur qui indique si la propriété ConfigurationName utilise une autre valeur que sa valeur par défaut et doit être sérialisée.

ShouldSerializeReleaseServiceInstanceOnTransactionComplete()

Retourne une valeur qui indique si la propriété ReleaseServiceInstanceOnTransactionComplete utilise une autre valeur que sa valeur par défaut et doit être sérialisée.

ShouldSerializeTransactionAutoCompleteOnSessionClose()

Retourne une valeur qui indique si la propriété TransactionAutoCompleteOnSessionClose utilise une autre valeur que sa valeur par défaut et doit être sérialisée.

ShouldSerializeTransactionIsolationLevel()

Retourne une valeur qui indique si la propriété TransactionIsolationLevel utilise une autre valeur que sa valeur par défaut et doit être sérialisée.

ShouldSerializeTransactionTimeout()

Retourne une valeur qui indique si la propriété TransactionTimeout utilise une autre valeur que sa valeur par défaut et doit être sérialisée.

ToString()

Retourne une chaîne qui représente l'objet actuel.

(Hérité de Object)

Implémentations d’interfaces explicites

_Attribute.GetIDsOfNames(Guid, IntPtr, UInt32, UInt32, IntPtr)

Mappe un jeu de noms avec un jeu correspondant d'identificateurs de dispatch.

(Hérité de Attribute)
_Attribute.GetTypeInfo(UInt32, UInt32, IntPtr)

Récupère les informations de type pour un objet, qui peuvent être utilisées pour obtenir les informations de type d'une interface.

(Hérité de Attribute)
_Attribute.GetTypeInfoCount(UInt32)

Récupère le nombre d'interfaces d'informations de type fourni par un objet (0 ou 1).

(Hérité de Attribute)
_Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr)

Fournit l'accès aux propriétés et aux méthodes exposées par un objet.

(Hérité de Attribute)
IServiceBehavior.AddBindingParameters(ServiceDescription, ServiceHostBase, Collection<ServiceEndpoint>, BindingParameterCollection)

Passe des objets de données personnalisés aux liaisons qui prennent en charge les propriétés de comportement.

IServiceBehavior.ApplyDispatchBehavior(ServiceDescription, ServiceHostBase)

Personnalise le moment d'exécution du service afin de prendre en charge les propriétés de comportement.

IServiceBehavior.Validate(ServiceDescription, ServiceHostBase)

Vérifie que la description du service et l'hôte du service sont capables de prendre en charge le comportement.

S’applique à

Voir aussi