Partilhar via


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 exemplo de código a seguir demonstra as ServiceBehaviorAttribute propriedades. A BehaviorService classe usa o ServiceBehaviorAttribute atributo para indicar que:

  • O objeto de serviço é reciclado quando a transação é concluída.

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

  • O serviço é de thread único e não dá suporte a chamadas reentrantes.

Além disso, no nível da operação, os OperationBehaviorAttribute valores indicam que o TxWork método se inscreve automaticamente em transações fluídas ou cria uma nova transação para fazer o trabalho e que a transação é confirmada automaticamente se uma exceção sem tratamento não ocorrer.

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 associação subjacente deve dar suporte a transações fluídas para que o exemplo de código a seguir seja executado corretamente. Para dar suporte a transações fluídas usando o WSHttpBinding, por exemplo, defina a TransactionFlow propriedade true como no código ou em um arquivo de configuração de aplicativo. O exemplo de código a seguir mostra o arquivo de configuração do exemplo 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>

Comentários

Aplique 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 no nível do método, use o OperationBehaviorAttribute atributo .) Esse atributo só pode ser aplicado a implementações de serviço. Para obter exemplos de trabalho, consulte o Exemplos de Serviço: Comportamentos.

ServiceBehaviorAttribute as propriedades são um recurso de modelo de programação do WCF (Windows Communication Foundation) que permite recursos comuns que os desenvolvedores precisam implementar. Para obter mais informações sobre esses e outros comportamentos, consulte Especificando o comportamento de Run-Time de serviço. Para obter mais informações sobre as propriedades de runtime subjacentes que algumas das propriedades a seguir definem, consulte Extending ServiceHost and the Service Model Layer.

  • A AddressFilterMode propriedade especifica o tipo de filtro que o sistema dispatcher usa para localizar o ponto de extremidade que manipula solicitações.

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

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

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

  • A IgnoreExtensionDataObject propriedade permite que o tempo de execução ignore informações extras de serialização que não são necessárias para processar a mensagem.

  • A IncludeExceptionDetailInFaults propriedade especifica se exceções sem tratamento em um serviço são retornadas como falhas SOAP. Isso é apenas para fins de depuração.

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

  • A MaxItemsInObjectGraph propriedade a ser limitada ao número de itens em um grafo de objeto que são serializados.

  • As Name propriedades e Namespace controlam o nome e o namespace da 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 propriedade TransactionAutoCompleteOnSessionClose especifica se as transações pendentes são concluídas quando a sessão é fechada.

  • A TransactionIsolationLevel propriedade especifica o nível de isolamento da transação ao qual o contrato dá suporte.

  • A TransactionTimeout propriedade especifica o período de tempo no qual uma transação deve ser concluída ou anulada.

  • A UseSynchronizationContext propriedade indica se as chamadas de método de entrada devem ser sincronizadas automaticamente com o thread da interface do usuário.

  • A ValidateMustUnderstand propriedade informa ao sistema se ele deve confirmar se os cabeçalhos SOAP marcados como MustUnderstand foram, de fato, compreendidos.

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

Construtores

ServiceBehaviorAttribute()

Inicializa uma nova instância da classe ServiceBehaviorAttribute.

Propriedades

AddressFilterMode

Obtém ou define o AddressFilterMode usado pelo dispatcher para encaminhar mensagens de entrada ao ponto de extremidade correto.

AutomaticSessionShutdown

Especifica se uma sessão será fechada automaticamente quando um cliente fechar uma sessão de saída.

ConcurrencyMode

Obtém ou define se um serviço dá suporte a um thread, vários threads ou chamadas reentrantes.

ConfigurationName

Obtém ou define o valor usado para localizar o elemento de serviço em um arquivo de configuração de aplicativo.

EnsureOrderedDispatch

Obtém ou define um valor que indica se o envio ordenado pelo serviço é garantido.

IgnoreExtensionDataObject

Obtém ou define um valor que especifica se dados de serialização desconhecidos serão enviados na conexão.

IncludeExceptionDetailInFaults

Obtém ou define um valor que especifica que as exceções de execução gerais sem tratamento devem ser convertidas em um FaultException<TDetail> do tipo ExceptionDetail e enviadas como uma mensagem de falha. Defina-o como true somente durante o desenvolvimento para solucionar problemas de um serviço.

InstanceContextMode

Obtém 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 em um objeto serializado.

Name

Obtém ou define o valor do atributo de nome no elemento de serviço em linguagem WSDL.

Namespace

Obtém ou define o valor do namespace de destino para o serviço em linguagem WSDL.

ReleaseServiceInstanceOnTransactionComplete

Obtém ou define um valor que especifica se o objeto de serviço será liberado quando a transação atual for concluída.

TransactionAutoCompleteOnSessionClose

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

TransactionIsolationLevel

Especifica o nível de isolamento da transação para novas transações criadas dentro do serviço e fluxo de transações de entrada de um cliente.

TransactionTimeout

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

TypeId

Quando implementado em uma classe derivada, obtém um identificador exclusivo para este Attribute.

(Herdado de Attribute)
UseSynchronizationContext

Obtém ou define um valor que especifica se o contexto de sincronização atual deve ser usado para escolher o thread de execução.

ValidateMustUnderstand

Obtém ou define um valor que especifica se o sistema ou o aplicativo reforça o processamento de cabeçalho SOAP MustUnderstand.

Métodos

Equals(Object)

Retorna um valor que indica se essa instância é igual a um objeto especificado.

(Herdado de Attribute)
GetHashCode()

Retorna o código hash para a 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 a instância singleton do serviço ou null, se não houver nenhuma instância singleton.

IsDefaultAttribute()

Quando substituído em uma classe derivada, indica se o valor dessa instância é o valor padrão para a classe derivada.

(Herdado de Attribute)
Match(Object)

Quando substituído em uma classe derivada, retorna um valor que indica se essa instância é igual a um objeto especificado.

(Herdado de Attribute)
MemberwiseClone()

Cria uma cópia superficial do Object atual.

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

Retorna um valor que indica se a propriedade ConfigurationName foi alterada do valor padrão e se deve ser serializada.

ShouldSerializeReleaseServiceInstanceOnTransactionComplete()

Retorna um valor que indica se a propriedade ReleaseServiceInstanceOnTransactionComplete foi alterada do valor padrão e se deve ser serializada.

ShouldSerializeTransactionAutoCompleteOnSessionClose()

Retorna um valor que indica se a propriedade TransactionAutoCompleteOnSessionClose foi alterada do valor padrão e se deve ser serializada.

ShouldSerializeTransactionIsolationLevel()

Retorna um valor que indica se a propriedade TransactionIsolationLevel foi alterada do valor padrão e se deve ser serializada.

ShouldSerializeTransactionTimeout()

Retorna um valor que indica se a propriedade TransactionTimeout foi alterada do valor padrão e se deve ser serializada.

ToString()

Retorna uma cadeia de caracteres que representa o objeto atual.

(Herdado de Object)

Implantações explícitas de interface

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

Mapeia um conjunto de nomes para um conjunto correspondente de identificadores de expedição.

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

Recupera as informações de tipo para um objeto, que pode ser usado para obter as informações de tipo para uma interface.

(Herdado de Attribute)
_Attribute.GetTypeInfoCount(UInt32)

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

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

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

(Herdado de Attribute)
IServiceBehavior.AddBindingParameters(ServiceDescription, ServiceHostBase, Collection<ServiceEndpoint>, BindingParameterCollection)

Passa os objetos de dados personalizados para as associações compatíveis com propriedades de comportamento.

IServiceBehavior.ApplyDispatchBehavior(ServiceDescription, ServiceHostBase)

Personaliza o tempo de execução do serviço para ser compatível com as propriedades de comportamento.

IServiceBehavior.Validate(ServiceDescription, ServiceHostBase)

Confirma que a descrição do serviço e o host de serviço são capazes de aceitar o comportamento.

Aplica-se a

Confira também