ServiceBehaviorAttribute Classe
Definição
Importante
Algumas informações dizem respeito a um produto pré-lançado que pode ser substancialmente modificado antes de ser lançado. A Microsoft não faz garantias, de forma expressa ou implícita, em relação à informação aqui apresentada.
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 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
nameatributo 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
MustUnderstandterã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 |
| 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 |
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 |
| 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. |