OperationBehaviorAttribute Klasa

Definicja

Określa zachowanie lokalnego wykonywania metody usługi.

public ref class OperationBehaviorAttribute sealed : Attribute, System::ServiceModel::Description::IOperationBehavior
[System.AttributeUsage(System.AttributeTargets.Method)]
public sealed class OperationBehaviorAttribute : Attribute, System.ServiceModel.Description.IOperationBehavior
[<System.AttributeUsage(System.AttributeTargets.Method)>]
type OperationBehaviorAttribute = class
    inherit Attribute
    interface IOperationBehavior
Public NotInheritable Class OperationBehaviorAttribute
Inherits Attribute
Implements IOperationBehavior
Dziedziczenie
OperationBehaviorAttribute
Atrybuty
Implementuje

Przykłady

Poniższy przykład kodu przedstawia operację wykonywaną w ramach obowiązkowej transakcji rozproszonej. Właściwość TransactionScopeRequired wskazuje, że metoda jest wykonywana w ramach transakcji obiektu wywołującego, a TransactionAutoComplete właściwość wskazuje, że jeśli nie wystąpią nieobsługiwane wyjątki, transakcja zatwierdza automatycznie. Jeśli wystąpi nieobsługiwany wyjątek, transakcja zostanie przerwana.

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:
     *   -- Always executes under a transaction scope.
     *   -- The transaction scope is completed when the operation terminates
     *       without an unhandled exception.
     */
    [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:
        '     *   -- Always executes under a transaction scope.
        '     *   -- The transaction scope is completed when the operation terminates 
        '     *       without an unhandled exception.
        '     
        <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

Uwagi

Użyj atrybutu OperationBehaviorAttribute , aby wskazać zachowanie wykonania specyficzne dla operacji, które ma operacja podczas wykonywania. (Aby określić zachowanie wykonywania na poziomie usługi, użyj atrybutu ServiceBehaviorAttribute ).

Uwaga

Można również użyć OperationBehaviorAttribute polecenia , aby skonfigurować operację kontraktu wywołania zwrotnego w aplikacji klienckiej dwukierunkowej. W przypadku użycia operacji wywołania zwrotnego ReleaseInstanceMode właściwość musi być None lub wyjątek InvalidOperationException jest zgłaszany w czasie wykonywania.

Atrybut OperationBehaviorAttribute jest funkcją modelu programowania Windows Communication Foundation (WCF), która umożliwia typowe funkcje, które deweloperzy w przeciwnym razie muszą zaimplementować samodzielnie.

  • Właściwość AutoDisposeParameters określa, czy obiekty parametrów przekazane do operacji są usuwane po zakończeniu operacji.

  • Właściwość określa, czy transakcja TransactionAutoComplete , w której jest wykonywana metoda, jest automatycznie zatwierdzana, jeśli nie występują nieobsługiwane wyjątki.

  • Właściwość TransactionScopeRequired określa, czy metoda musi zostać wykonana w ramach transakcji.

  • Właściwość Impersonation określa, czy operacja usługi może, musi lub nie może personifikować tożsamości obiektu wywołującego.

  • Właściwość ReleaseInstanceMode określa, kiedy obiekty usługi są poddawane recyklingu podczas procesu wywołania metody.

Konstruktory

OperationBehaviorAttribute()

Inicjuje nowe wystąpienie klasy OperationBehaviorAttribute.

Właściwości

AutoDisposeParameters

Pobiera lub ustawia wartość, która wskazuje, czy parametry mają być automatycznie usuwane.

Impersonation

Pobiera lub ustawia wartość wskazującą poziom personifikacji obiektu wywołującego, który obsługuje operacja.

ReleaseInstanceMode

Pobiera lub ustawia wartość, która wskazuje, kiedy w trakcie wywołania operacji w celu odtworzenia obiektu usługi.

TransactionAutoComplete

Pobiera lub ustawia wartość wskazującą, czy automatycznie ukończyć bieżący zakres transakcji, jeśli nie wystąpią nieobsługiwane wyjątki.

TransactionScopeRequired

Pobiera lub ustawia wartość, która wskazuje, czy metoda wymaga zakresu transakcji dla jego wykonania.

TypeId

Po zaimplementowaniu w klasie pochodnej pobiera unikatowy identyfikator dla tego Attributeelementu .

(Odziedziczone po Attribute)

Metody

Equals(Object)

Zwraca wartość wskazującą, czy to wystąpienie jest równe podanemu obiektowi.

(Odziedziczone po Attribute)
GetHashCode()

Zwraca wartość skrótu dla tego wystąpienia.

(Odziedziczone po Attribute)
GetType()

Type Pobiera wartość bieżącego wystąpienia.

(Odziedziczone po Object)
IsDefaultAttribute()

Podczas zastępowania w klasie pochodnej wskazuje, czy wartość tego wystąpienia jest wartością domyślną dla klasy pochodnej.

(Odziedziczone po Attribute)
Match(Object)

Po przesłonięciu w klasie pochodnej zwraca wartość wskazującą, czy to wystąpienie jest równe określonemu obiektowi.

(Odziedziczone po Attribute)
MemberwiseClone()

Tworzy płytkią kopię bieżącego Objectelementu .

(Odziedziczone po Object)
ToString()

Zwraca ciąg reprezentujący bieżący obiekt.

(Odziedziczone po Object)

Jawne implementacje interfejsu

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

Zestaw nazw jest mapowany na odpowiedni zestaw identyfikatorów wysyłania.

(Odziedziczone po Attribute)
_Attribute.GetTypeInfo(UInt32, UInt32, IntPtr)

Pobiera informacje o typie dla obiektu, który może służyć do pobierania informacji o typie dla interfejsu.

(Odziedziczone po Attribute)
_Attribute.GetTypeInfoCount(UInt32)

Pobiera informację o liczbie typów interfejsów, jakie zawiera obiekt (0 lub 1).

(Odziedziczone po Attribute)
_Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr)

Umożliwia dostęp do właściwości i metod udostępnianych przez obiekt.

(Odziedziczone po Attribute)
IOperationBehavior.AddBindingParameters(OperationDescription, BindingParameterCollection)

Implementuje metodę AddBindingParameters(OperationDescription, BindingParameterCollection) .

IOperationBehavior.ApplyClientBehavior(OperationDescription, ClientOperation)

Implementuje zachowanie operacji klienta.

IOperationBehavior.ApplyDispatchBehavior(OperationDescription, DispatchOperation)

Implementuje zachowanie operacji usługi.

IOperationBehavior.Validate(OperationDescription)

Implementuje zachowanie walidacji.

Dotyczy