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 ServiceBehaviorAttribute propriétés. La BehaviorService classe utilise l’attribut ServiceBehaviorAttribute pour indiquer que :

  • L’objet de service est recyclé lorsque la transaction est terminée.

  • Il existe un objet de service pour chaque session.

  • Le service est monothread et ne prend pas en charge les appels reentrants.

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

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 transmises pour que l’exemple de code suivant s’exécute correctement. Pour prendre en charge les transactions transmises à l’aide de la WSHttpBindingpropriété, par exemple, définissez la propriété true dans le TransactionFlow code ou dans un fichier de configuration d’application. L’exemple de code suivant montre le fichier de configuration de 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 à une implémentation de service pour spécifier le ServiceBehaviorAttribute 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 les exemples de comportement du service :

ServiceBehaviorAttribute les propriétés sont une fonctionnalité de modèle de programmation Windows Communication Foundation (WCF) qui permet aux développeurs d’implémenter des fonctionnalités communes. Pour plus d’informations sur ces comportements et d’autres comportements, 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 AddressFilterMode propriété spécifie le type de filtre utilisé par le système de répartiteur pour localiser le point de terminaison qui gère les requêtes.

  • La AutomaticSessionShutdown propriété ferme automatiquement la session lorsque le canal est fermé et que le service a terminé le traitement des messages restants.

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

  • La ConfigurationName propriété est utilisée pour déclarer un nom à utiliser dans l’attribut name de l’élément <service> dans un fichier de configuration.

  • La IgnoreExtensionDataObject propriété permet à l’exécution d’ignorer les informations de sérialisation supplémentaires qui ne sont pas requises pour traiter le message.

  • La IncludeExceptionDetailInFaults propriété spécifie si les exceptions non gérées dans un service sont retournées en tant qu’erreurs SOAP. Il s’agit uniquement d’un débogage.

  • La InstanceContextMode propriété spécifie si et quand les services et leurs objets de service doivent être recyclés lors d’un échange avec un client.

  • Propriété MaxItemsInObjectGraph à limiter au nombre d’éléments d’un graphique d’objet sérialisé.

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

  • La ReleaseServiceInstanceOnTransactionComplete propriété spécifie si l’objet de service est recyclé lorsqu’une transaction est terminée.

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

  • La TransactionIsolationLevel propriété spécifie le niveau d’isolation des transactions pris en charge par le contrat.

  • La TransactionTimeout propriété spécifie la période pendant laquelle une transaction doit se terminer ou abandonner.

  • La UseSynchronizationContext propriété indique s’il faut synchroniser automatiquement les appels de méthode entrant avec le thread d’interface utilisateur.

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

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

Constructeurs

Nom Description
ServiceBehaviorAttribute()

Initialise une nouvelle instance de la classe ServiceBehaviorAttribute.

Propriétés

Nom Description
AddressFilterMode

Obtient ou définit celui AddressFilterMode utilisé par le répartiteur pour router les messages entrants vers le point de terminaison correct.

AutomaticSessionShutdown

Spécifie s’il faut fermer automatiquement une session 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 reentrants.

ConfigurationName

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

EnsureOrderedDispatch

Obtient ou définit une valeur qui indique si la répartition ordonnée du service est assurée.

IgnoreExtensionDataObject

Obtient ou définit une valeur qui spécifie s’il faut envoyer des données de sérialisation inconnues sur le câble.

IncludeExceptionDetailInFaults

Obtient ou définit une valeur qui spécifie que les exceptions d’exécution non gérées générales doivent être converties en un FaultException<TDetail> type ExceptionDetail et envoyées en tant que message d’erreur. Définissez cette valeur true uniquement pendant le développement pour résoudre les problèmes d’un service.

InstanceContextMode

Obtient ou définit la valeur qui indique quand 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 de nom dans l’élément de service dans le langage WSDL (Web Services Description Language).

Namespace

Obtient ou définit la valeur de l’espace de noms cible pour le service dans le langage WSDL (Web Services Description Language).

ReleaseServiceInstanceOnTransactionComplete

Obtient ou définit une valeur qui spécifie si l’objet de service est libéré lorsque la transaction actuelle se termine.

TransactionAutoCompleteOnSessionClose

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

TransactionIsolationLevel

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

TransactionTimeout

Obtient ou définit la période pendant laquelle une transaction doit se terminer.

TypeId

En cas d’implémentation dans une classe dérivée, obtient un identificateur unique pour cette Attribute.

(Hérité de Attribute)
UseSynchronizationContext

Obtient ou définit une valeur qui spécifie s’il faut utiliser le contexte de synchronisation actuel pour choisir 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 SOAP MustUnderstand .

Méthodes

Nom Description
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 pour cette instance.

(Hérité de Attribute)
GetType()

Obtient la 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 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 de la classe dérivée.

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

En cas de substitution dans une classe dérivée, retourne une valeur qui indique si cette instance est égale à un objet spécifié.

(Hérité de Attribute)
MemberwiseClone()

Crée une copie superficielle du Objectactuel.

(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 ConfigurationName propriété a changé de sa valeur par défaut et doit être sérialisée.

ShouldSerializeReleaseServiceInstanceOnTransactionComplete()

Retourne une valeur qui indique si la ReleaseServiceInstanceOnTransactionComplete propriété a changé de sa valeur par défaut et doit être sérialisée.

ShouldSerializeTransactionAutoCompleteOnSessionClose()

Retourne une valeur qui indique si la TransactionAutoCompleteOnSessionClose propriété a changé de sa valeur par défaut et doit être sérialisée.

ShouldSerializeTransactionIsolationLevel()

Retourne une valeur qui indique si la TransactionIsolationLevel propriété a changé de sa valeur par défaut et doit être sérialisée.

ShouldSerializeTransactionTimeout()

Retourne une valeur qui indique si la TransactionTimeout propriété a changé de 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

Nom Description
_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 d’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 méthodes exposées par un objet.

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

Transmet 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 temps d’exécution du service pour prendre en charge les propriétés de comportement.

IServiceBehavior.Validate(ServiceDescription, ServiceHostBase)

Confirme que la description du service et l’hôte de service sont capables de prendre en charge le comportement.

S’applique à

Voir aussi