OperationBehaviorAttribute Classe

Definição

Especifica o comportamento de execução local de um método de serviço.

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
Herança
OperationBehaviorAttribute
Atributos
Implementações

Exemplos

O seguinte exemplo de código mostra uma operação que é executada dentro de uma transação distribuída obrigatória. A TransactionScopeRequired propriedade indica que o método é executado sob a transação do chamador e indica TransactionAutoComplete que, se não ocorrerem exceções não tratadas, a transação compromete-se automaticamente. Se ocorrer uma exceção não tratada, a transação é abortada.

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

Observações

Use o OperationBehaviorAttribute atributo para indicar que comportamento de execução específico da operação a operação apresenta quando executada. (Para especificar o comportamento de execução ao nível do serviço, use o ServiceBehaviorAttribute atributo.)

Note

Também pode usar OperationBehaviorAttribute para configurar uma operação de contrato de callback numa aplicação cliente duplex. Quando usada numa operação de callback, a ReleaseInstanceMode propriedade deve ser None usada ou uma InvalidOperationException exceção é lançada em tempo de execução.

O atributo OperationBehaviorAttribute é uma funcionalidade do modelo de programação Windows Communication Foundation (WCF) que permite funcionalidades comuns que os programadores terão de implementar por si próprios.

  • A AutoDisposeParameters propriedade controla se os objetos de parâmetro passados para uma operação são eliminados quando a operação termina.

  • A TransactionAutoComplete propriedade especifica se a transação em que o método é executado é automaticamente comprometida se não ocorrerem exceções não tratadas.

  • A TransactionScopeRequired propriedade especifica se um método deve ser executado dentro de uma transação.

  • A Impersonation propriedade especifica se a operação de serviço pode, deve ou não imitar a identidade do chamador.

  • A ReleaseInstanceMode propriedade especifica quando os objetos de serviço são reciclados durante o processo de invocação do método.

Construtores

Name Description
OperationBehaviorAttribute()

Inicializa uma nova instância da OperationBehaviorAttribute classe.

Propriedades

Name Description
AutoDisposeParameters

Obtém ou define um valor que indica se os parâmetros devem ser automaticamente eliminados.

Impersonation

Recebe ou define um valor que indica o nível de personificação do chamador que a operação suporta.

ReleaseInstanceMode

Recebe ou define um valor que indica quando, durante o decurso de uma operação, a invocação para reciclar o objeto de serviço.

TransactionAutoComplete

Recebe ou define um valor que indica se deve completar automaticamente o âmbito da transação atual caso não ocorram exceções não tratadas.

TransactionScopeRequired

Recebe ou define um valor que indica se o método requer um âmbito de transação para a sua execução.

TypeId

Quando implementado numa classe derivada, obtém um identificador único para esta Attribute.

(Herdado de Attribute)

Métodos

Name Description
Equals(Object)

Devolve um valor que indica se esta instância é igual a um objeto especificado.

(Herdado de Attribute)
GetHashCode()

Devolve o código de hash para esta instância.

(Herdado de Attribute)
GetType()

Obtém o Type da instância atual.

(Herdado de Object)
IsDefaultAttribute()

Quando sobrescrito numa classe derivada, indica se o valor desta instância é o valor padrão para a classe derivada.

(Herdado de Attribute)
Match(Object)

Quando sobrescrito numa classe derivada, devolve um valor que indica se esta instância é igual a um objeto especificado.

(Herdado de Attribute)
MemberwiseClone()

Cria uma cópia superficial do atual Object.

(Herdado de Object)
ToString()

Devolve uma cadeia que representa o objeto atual.

(Herdado de Object)

Implementações de Interface Explícita

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

Mapeia um conjunto de nomes para um conjunto correspondente de identificadores de despacho.

(Herdado de Attribute)
_Attribute.GetTypeInfo(UInt32, UInt32, IntPtr)

Recupera a informação de tipo de um objeto, que pode ser usada para obter a informação de tipo para uma interface.

(Herdado de Attribute)
_Attribute.GetTypeInfoCount(UInt32)

Recupera o número de interfaces de informações de tipo que um objeto fornece (0 ou 1).

(Herdado de Attribute)
_Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr)

Proporciona acesso a propriedades e métodos expostos por um objeto.

(Herdado de Attribute)
IOperationBehavior.AddBindingParameters(OperationDescription, BindingParameterCollection)

Implementa o AddBindingParameters(OperationDescription, BindingParameterCollection) método.

IOperationBehavior.ApplyClientBehavior(OperationDescription, ClientOperation)

Implementa o comportamento operacional do cliente.

IOperationBehavior.ApplyDispatchBehavior(OperationDescription, DispatchOperation)

Implementa o comportamento operacional do serviço.

IOperationBehavior.Validate(OperationDescription)

Implementa o comportamento de validação.

Aplica-se a