ServiceBehaviorAttribute Classe
Définition
Important
Certaines informations portent sur la préversion du produit qui est susceptible d’être en grande partie modifiée avant sa publication. Microsoft exclut toute garantie, expresse ou implicite, concernant les informations fournies ici.
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
- 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 |
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 |
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 |
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. |