ServiceBehaviorAttribute Classe
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
Specifica il comportamento di esecuzione interno di un'implementazione del contratto di servizio.
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
- Ereditarietà
- Attributi
- Implementazioni
Esempio
Nell'esempio di codice seguente vengono illustrate le proprietà della classe ServiceBehaviorAttribute. La classe BehaviorService
utilizza l'attributo ServiceBehaviorAttribute per indicare quanto segue:
L'oggetto servizio viene riciclato al completamento della transazione.
È presente un solo oggetto servizio per ogni sessione.
Il servizio è a thread singolo e non supporta le chiamate rientranti.
Inoltre, a livello di operazione, i valori della classe OperationBehaviorAttribute indicano che il metodo TxWork
viene inserito automaticamente nelle transazioni propagate o crea una nuova transazione per l'esecuzione dell'operazione e che, se non si verifica alcuna eccezione non gestita, viene eseguito automaticamente il commit della transazione.
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
Affinché l'esempio di codice seguente venga eseguito correttamente, è necessario che l'associazione sottostante supporti le transazioni propagate. Per supportare le transazioni propagate utilizzando l'associazione WSHttpBinding, ad esempio, impostare la proprietà TransactionFlow su true
nel codice o in un file di configurazione dell'applicazione. Nell'esempio di codice seguente viene illustrato il file di configurazione per l'esempio precedente.
<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>
Commenti
Applicare l'attributo ServiceBehaviorAttribute all'implementazione di un servizio per specificare il comportamento di esecuzione a livello di servizio. Per specificare il comportamento di esecuzione a livello di metodo, usare l'attributo OperationBehaviorAttribute . Questo attributo può essere applicato solo alle implementazioni del servizio. Per esempi di lavoro, vedere Servizio: Esempi di comportamenti.
ServiceBehaviorAttribute le proprietà sono una funzionalità del modello di programmazione WINDOWS Communication Foundation (WCF) che consente alle funzionalità comuni che gli sviluppatori devono implementare in caso contrario. Per altre informazioni su questi e altri comportamenti, vedere Specifica del comportamento del servizio Run-Time. Per altre informazioni sulle proprietà di runtime sottostanti impostate su alcune delle proprietà seguenti, vedere Estensione di ServiceHost e livello modello di servizio.
La proprietà AddressFilterMode specifica il tipo di filtro che il sistema dei dispatcher utilizza per individuare l'endpoint che gestisce le richieste.
La proprietà AutomaticSessionShutdown determina la chiusura automatica della sessione quando il canale viene chiuso e il servizio ha terminato l'elaborazione dei messaggi rimanenti.
La proprietà ConcurrencyMode controlla il modello di threading interno, consentendo il supporto di servizi rientranti o multithreading.
La proprietà ConfigurationName viene utilizzata per dichiarare un nome da utilizzare nell'attributo
name
dell'elemento<service>
in un file di configurazione.La proprietà IgnoreExtensionDataObject consente al runtime di ignorare le informazioni di serializzazione aggiuntive che non sono necessarie per elaborare il messaggio.
La proprietà IncludeExceptionDetailInFaults specifica se le eccezioni non gestite in un servizio vengono restituite come errori SOAP. Viene utilizzata solo per fini di debug.
La proprietà InstanceContextMode specifica se e quando i servizi e i relativi oggetti servizio devono essere riciclati durante uno scambio con un client.
La proprietà MaxItemsInObjectGraph limita il numero di elementi di un oggetto grafico che vengono serializzati.
Le proprietà Name e Namespace controllano il nome e lo spazio dei nomi per l'espressione WSDL dell'elemento del servizio.
La proprietà ReleaseServiceInstanceOnTransactionComplete specifica se l'oggetto servizio viene riciclato al termine di una transazione.
La proprietà TransactionAutoCompleteOnSessionClose specifica se alla chiusura della sessione corrente vengono completate le transazioni in attesa.
La proprietà TransactionIsolationLevel specifica il livello di isolamento della transazione supportato dal contratto.
La proprietà TransactionTimeout specifica il periodo di tempo entro il quale una transazione deve essere completata prima di essere interrotta.
La proprietà UseSynchronizationContext indica se sincronizzare automaticamente le chiamate ai metodi in ingresso con il thread dell'interfaccia utente.
La proprietà ValidateMustUnderstand indica al sistema se è necessario verificare che le intestazioni SOAP contrassegnate con
MustUnderstand
, siano state in effetti riconosciute.
La proprietà IncludeExceptionDetailInFaults può essere impostata anche utilizzando un file di configurazione dell'applicazione. Per informazioni dettagliate, vedere IncludeExceptionDetailInFaults.
Costruttori
ServiceBehaviorAttribute() |
Inizializza una nuova istanza della classe ServiceBehaviorAttribute. |
Proprietà
AddressFilterMode |
Ottiene o imposta l'enumerazione AddressFilterMode utilizzata dal dispatcher per indirizzare i messaggi in ingresso all'endpoint corretto. |
AutomaticSessionShutdown |
Specifica se chiudere automaticamente una sessione quando un client chiude una sessione di output. |
ConcurrencyMode |
Ottiene o imposta un valore che indica se un servizio supporta un solo thread, più thread o chiamate rientranti. |
ConfigurationName |
Ottiene o imposta il valore utilizzato per individuare l'elemento di servizio in un file di configurazione dell'applicazione. |
EnsureOrderedDispatch |
Ottiene o imposta un valore che indica se l'invio ordinato del servizio è assicurato. |
IgnoreExtensionDataObject |
Ottiene o imposta un valore che specifica se inviare i dati di serializzazione sconosciuti in transito. |
IncludeExceptionDetailInFaults |
Ottiene o imposta un valore che specifica che le eccezioni di esecuzione generiche non gestite devono essere convertite in una classe FaultException<TDetail> di tipo ExceptionDetail e inviate come messaggio di errore. Impostare questa proprietà su |
InstanceContextMode |
Ottiene o imposta il valore che indica quando vengono creati nuovi oggetti servizio. |
MaxItemsInObjectGraph |
Ottiene o imposta il numero massimo di elementi consentiti in un oggetto serializzato. |
Name |
Ottiene o imposta il valore dell'attributo del nome nell'elemento di servizio in WSDL (Web Services Description Language). |
Namespace |
Ottiene o imposta il valore dello spazio dei nomi di destinazione per il servizio in WSDL (Web Services Description Language). |
ReleaseServiceInstanceOnTransactionComplete |
Ottiene o imposta un valore che specifica se l'oggetto servizio viene rilasciato al completamento della transazione corrente. |
TransactionAutoCompleteOnSessionClose |
Ottiene o imposta un valore che specifica se completare automaticamente le transazioni in sospeso alla chiusura senza errori della sessione corrente. |
TransactionIsolationLevel |
Specifica il livello di isolamento per le nuove transazioni create all'interno del servizio e per le transazioni in ingresso propagate da un client. |
TransactionTimeout |
Ottiene o imposta il periodo di tempo entro il quale deve essere completata una transazione. |
TypeId |
Quando è implementata in una classe derivata, ottiene un identificatore univoco della classe Attribute. (Ereditato da Attribute) |
UseSynchronizationContext |
Ottiene o imposta un valore che specifica se utilizzare il contesto di sincronizzazione corrente per scegliere il thread di esecuzione. |
ValidateMustUnderstand |
Ottiene o imposta un valore che specifica se il sistema o l'applicazione applica l'elaborazione dell'intestazione |
Metodi
Equals(Object) |
Restituisce un valore che indica se questa istanza è uguale a un oggetto specificato. (Ereditato da Attribute) |
GetHashCode() |
Restituisce il codice hash per l'istanza. (Ereditato da Attribute) |
GetType() |
Ottiene l'oggetto Type dell'istanza corrente. (Ereditato da Object) |
GetWellKnownSingleton() |
Recupera un oggetto che implementa il servizio e che viene utilizzato come l'istanza singleton del servizio o |
IsDefaultAttribute() |
In caso di override in una classe derivata, indica se il valore di questa istanza è il valore predefinito per la classe derivata. (Ereditato da Attribute) |
Match(Object) |
Quando è sottoposto a override in una classe derivata, restituisce un valore che indica se questa istanza equivale a un oggetto specificato. (Ereditato da Attribute) |
MemberwiseClone() |
Crea una copia superficiale dell'oggetto Object corrente. (Ereditato da Object) |
SetWellKnownSingleton(Object) |
Specifica un oggetto che implementa il servizio e che viene utilizzato come l'istanza singleton del servizio. |
ShouldSerializeConfigurationName() |
Restituisce un valore che indica se la proprietà ConfigurationName è cambiata rispetto al valore predefinito e deve essere serializzata. |
ShouldSerializeReleaseServiceInstanceOnTransactionComplete() |
Restituisce un valore che indica se la proprietà ReleaseServiceInstanceOnTransactionComplete è cambiata rispetto al valore predefinito e deve essere serializzata. |
ShouldSerializeTransactionAutoCompleteOnSessionClose() |
Restituisce un valore che indica se la proprietà TransactionAutoCompleteOnSessionClose è cambiata rispetto al valore predefinito e deve essere serializzata. |
ShouldSerializeTransactionIsolationLevel() |
Restituisce un valore che indica se la proprietà TransactionIsolationLevel è cambiata rispetto al valore predefinito e deve essere serializzata. |
ShouldSerializeTransactionTimeout() |
Restituisce un valore che indica se la proprietà TransactionTimeout è cambiata rispetto al valore predefinito e deve essere serializzata. |
ToString() |
Restituisce una stringa che rappresenta l'oggetto corrente. (Ereditato da Object) |
Implementazioni dell'interfaccia esplicita
_Attribute.GetIDsOfNames(Guid, IntPtr, UInt32, UInt32, IntPtr) |
Esegue il mapping di un set di nomi a un set corrispondente di ID dispatch. (Ereditato da Attribute) |
_Attribute.GetTypeInfo(UInt32, UInt32, IntPtr) |
Recupera le informazioni sul tipo relative a un oggetto, che possono essere usate per ottenere informazioni sul tipo relative a un'interfaccia. (Ereditato da Attribute) |
_Attribute.GetTypeInfoCount(UInt32) |
Recupera il numero delle interfacce di informazioni sul tipo fornite da un oggetto (0 o 1). (Ereditato da Attribute) |
_Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr) |
Fornisce l'accesso a proprietà e metodi esposti da un oggetto. (Ereditato da Attribute) |
IServiceBehavior.AddBindingParameters(ServiceDescription, ServiceHostBase, Collection<ServiceEndpoint>, BindingParameterCollection) |
Passa gli oggetti dati personalizzati alle associazioni che supportano le proprietà di comportamento. |
IServiceBehavior.ApplyDispatchBehavior(ServiceDescription, ServiceHostBase) |
Personalizza il runtime del servizio per supportare le proprietà di comportamento. |
IServiceBehavior.Validate(ServiceDescription, ServiceHostBase) |
Conferma che la descrizione e l'host del servizio sono in grado di supportare il comportamento. |