ServiceBehaviorAttribute Classe
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
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
- 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 |
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 |
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 |
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. |