ServiceBehaviorAttribute Classe

Definição

Especifica o comportamento de execução interna de uma implementação de contrato de serviço.

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

Exemplos

O seguinte exemplo de código demonstra as propriedades ServiceBehaviorAttribute . A BehaviorService classe usa o ServiceBehaviorAttribute atributo para indicar que:

  • O objeto de serviço é reciclado quando a transação termina.

  • Existe um objeto de serviço para cada sessão.

  • O serviço é single-thread e não suporta chamadas reentrantes.

Além disso, ao nível da operação, os OperationBehaviorAttribute valores indicam que o TxWork método inscreve automaticamente transações fluídas ou cria uma nova transação para realizar o trabalho, e que a transação é comprometida automaticamente se não ocorrer uma exceção não tratada.

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

A ligação subjacente deve suportar transações fluídas para que o seguinte exemplo de código seja executado corretamente. Para suportar transações em fluxo usando o WSHttpBinding, por exemplo, defina a TransactionFlow propriedade para true in code ou num ficheiro de configuração de aplicação. O seguinte exemplo de código mostra o ficheiro de configuração para a amostra anterior.

<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>

Observações

Aplicar o ServiceBehaviorAttribute atributo a uma implementação de serviço para especificar o comportamento de execução em todo o serviço. (Para especificar o comportamento de execução ao nível do método, use o OperationBehaviorAttribute atributo.) Este atributo só pode ser aplicado a implementações de serviços. Para exemplos práticos, consulte o Serviço: Exemplos de Comportamentos.

As propriedades ServiceBehaviorAttribute são uma funcionalidade do modelo de programação Windows Communication Foundation (WCF) que permite funcionalidades comuns que, de outra forma, os programadores teriam de implementar. Para mais informações sobre estes e outros comportamentos, consulte Especificar Comportamento Run-Time Serviço. Para mais informações sobre as propriedades subjacentes do tempo de execução que algumas das seguintes propriedades definiram, consulte Extending ServiceHost e a Camada do Modelo de Serviço.

  • A AddressFilterMode propriedade especifica o tipo de filtro que o sistema de despachante utiliza para localizar o endpoint que gere os pedidos.

  • A AutomaticSessionShutdown propriedade fecha automaticamente a sessão quando o canal é encerrado e o serviço termina de processar quaisquer mensagens restantes.

  • A ConcurrencyMode propriedade controla o modelo interno de threading, permitindo suporte para serviços reentrantes ou multithread.

  • A ConfigurationName propriedade é usada para declarar um nome para uso no name atributo do <service> elemento num ficheiro de configuração.

  • A IgnoreExtensionDataObject propriedade permite que o tempo de execução ignore informação adicional de serialização que não é necessária para processar a mensagem.

  • A IncludeExceptionDetailInFaults propriedade especifica se exceções não tratadas num serviço são devolvidas como falhas SOAP. Isto é apenas para fins de depuração.

  • A InstanceContextMode propriedade especifica se e quando os serviços e os seus objetos de serviço devem ser reciclados durante uma troca com um cliente.

  • A MaxItemsInObjectGraph propriedade de limitar o número de itens num grafo-objeto que são serializados.

  • As Name propriedades e Namespace controlam o nome e o espaço de nomes para a expressão WSDL do elemento de serviço.

  • A ReleaseServiceInstanceOnTransactionComplete propriedade especifica se o objeto de serviço é reciclado quando uma transação é concluída.

  • A TransactionAutoCompleteOnSessionClose propriedade especifica se as transações pendentes são concluídas quando a sessão é encerrada.

  • A TransactionIsolationLevel propriedade especifica o nível de isolamento da transação que o contrato suporta.

  • A TransactionTimeout propriedade especifica o período de tempo dentro do qual uma transação deve ser concluída ou ela aborta.

  • A UseSynchronizationContext propriedade indica se deve sincronizar automaticamente as chamadas de método de entrada com a thread da interface do utilizador.

  • A ValidateMustUnderstand propriedade informa o sistema se deve confirmar que os cabeçalhos SOAP marcados como MustUnderstand terão, de facto, sido compreendidos.

A IncludeExceptionDetailInFaults propriedade também pode ser definida usando um ficheiro de configuração de aplicação. Para obter detalhes, consulte IncludeExceptionDetailInFaults.

Construtores

Name Description
ServiceBehaviorAttribute()

Inicializa uma nova instância da ServiceBehaviorAttribute classe.

Propriedades

Name Description
AddressFilterMode

Obtém ou define o AddressFilterMode que é usado pelo despachante para encaminhar as mensagens recebidas para o endpoint correto.

AutomaticSessionShutdown

Especifica se deve fechar automaticamente uma sessão quando um cliente encerra uma sessão de saída.

ConcurrencyMode

Obtém ou define se um serviço suporta um thread, múltiplos threads ou chamadas reentrantes.

ConfigurationName

Obtém ou define o valor usado para localizar o elemento de serviço num ficheiro de configuração de aplicação.

EnsureOrderedDispatch

Recebe ou define um valor que indica se o despacho ordenado pelo serviço está assegurado.

IgnoreExtensionDataObject

Recebe ou define um valor que especifica se deve enviar dados de serialização desconhecidos para o fio.

IncludeExceptionDetailInFaults

Recebe ou define um valor que especifica que exceções gerais de execução não tratadas devem ser convertidas em um FaultException<TDetail> tipo ExceptionDetail de e enviadas como uma mensagem de falha. Defina isto apenas true durante o desenvolvimento, para resolver problemas de um serviço.

InstanceContextMode

Recebe ou define o valor que indica quando novos objetos de serviço são criados.

MaxItemsInObjectGraph

Obtém ou define o número máximo de itens permitidos num objeto serializado.

Name

Obtém ou define o valor do atributo name no elemento de serviço na Web Services Description Language (WSDL).

Namespace

Obtém ou define o valor do namespace alvo para o serviço na Web Services Description Language (WSDL).

ReleaseServiceInstanceOnTransactionComplete

Recebe ou define um valor que especifica se o objeto de serviço é libertado quando a transação atual termina.

TransactionAutoCompleteOnSessionClose

Recebe ou define um valor que especifica se as transações pendentes são concluídas quando a sessão atual termina sem erro.

TransactionIsolationLevel

Especifica o nível de isolamento das transações para novas transações criadas dentro do serviço, e para as transações recebidas a partir de um cliente.

TransactionTimeout

Obtém ou define o período dentro do qual uma transação deve ser concluída.

TypeId

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

(Herdado de Attribute)
UseSynchronizationContext

Recebe ou define um valor que especifica se deve usar o contexto de sincronização atual para escolher o thread de execução.

ValidateMustUnderstand

Recebe ou define um valor que especifica se o sistema ou a aplicação impõe o processamento de cabeçalhos SOAP MustUnderstand .

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)
GetWellKnownSingleton()

Recupera um objeto que implementa o serviço e que é usado como instância singleton do serviço, ou null se não existir uma instância singleton.

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)
SetWellKnownSingleton(Object)

Especifica um objeto que implementa o serviço e que é usado como a instância singleton do serviço.

ShouldSerializeConfigurationName()

Devolve um valor que indica se a ConfigurationName propriedade mudou em relação ao seu valor padrão e deve ser serializada.

ShouldSerializeReleaseServiceInstanceOnTransactionComplete()

Devolve um valor que indica se a ReleaseServiceInstanceOnTransactionComplete propriedade mudou em relação ao seu valor padrão e deve ser serializada.

ShouldSerializeTransactionAutoCompleteOnSessionClose()

Devolve um valor que indica se a TransactionAutoCompleteOnSessionClose propriedade mudou em relação ao seu valor padrão e deve ser serializada.

ShouldSerializeTransactionIsolationLevel()

Devolve um valor que indica se a TransactionIsolationLevel propriedade mudou em relação ao seu valor padrão e deve ser serializada.

ShouldSerializeTransactionTimeout()

Devolve um valor que indica se a TransactionTimeout propriedade mudou em relação ao seu valor padrão e deve ser serializada.

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)
IServiceBehavior.AddBindingParameters(ServiceDescription, ServiceHostBase, Collection<ServiceEndpoint>, BindingParameterCollection)

Passa objetos de dados personalizados para as ligações que suportam as propriedades de comportamento.

IServiceBehavior.ApplyDispatchBehavior(ServiceDescription, ServiceHostBase)

Personaliza o tempo de execução do serviço para suportar as propriedades de comportamento.

IServiceBehavior.Validate(ServiceDescription, ServiceHostBase)

Confirma que a descrição do serviço e o anfitrião do serviço são capazes de suportar o comportamento.

Aplica-se a

Ver também