ServiceBehaviorAttribute Classe

Definizione

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à
ServiceBehaviorAttribute
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 true solo durante la fase di sviluppo per la risoluzione dei problemi di un servizio.

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 MustUnderstand SOAP.

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 null se non esiste alcuna istanza singleton.

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.

Si applica a

Vedi anche