IEndpointBehavior Interface
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.
Implementa métodos que podem ser usados para estender o comportamento de tempo de execução de ponto de extremidade em um serviço ou aplicativo cliente.
public interface class IEndpointBehavior
public interface IEndpointBehavior
type IEndpointBehavior = interface
Public Interface IEndpointBehavior
- Derivado
Exemplos
O exemplo de código a seguir mostra a implementação de um comportamento de ponto de extremidade que adiciona um System.ServiceModel.Dispatcher.IDispatchMessageInspector objeto em um aplicativo de serviço. Nesse caso, a EndpointBehaviorMessageInspector
classe implementa System.ServiceModel.Dispatcher.IDispatchMessageInspector para inspecionar a mensagem de entrada e saída, a IEndpointBehavior interface para inserir a classe inspetor no sistema de inspeção para todos os pontos de extremidade aos quais o comportamento se aplica e para habilitar o System.ServiceModel.Configuration.BehaviorExtensionElement comportamento do inspetor de mensagens usando um arquivo de configuração de aplicativo.
A primeira etapa é implementar o inspetor de mensagens.
// IDispatchMessageInspector Members
public object AfterReceiveRequest(ref System.ServiceModel.Channels.Message request, IClientChannel channel, InstanceContext instanceContext)
{
Console.WriteLine("AfterReceiveRequest called.");
return null;
}
public void BeforeSendReply(ref System.ServiceModel.Channels.Message reply, object correlationState)
{
Console.WriteLine("BeforeSendReply called.");
}
O próximo exemplo de código mostra o uso do ApplyDispatchBehavior método para adicionar o inspetor de mensagens à DispatchRuntime.MessageInspectors propriedade.
// IEndpointBehavior Members
public void AddBindingParameters(ServiceEndpoint serviceEndpoint, System.ServiceModel.Channels.BindingParameterCollection bindingParameters)
{
return;
}
public void ApplyClientBehavior(ServiceEndpoint serviceEndpoint, ClientRuntime behavior)
{
behavior.MessageInspectors.Add(new EndpointBehaviorMessageInspector());
}
public void ApplyDispatchBehavior(ServiceEndpoint serviceEndpoint, EndpointDispatcher endpointDispatcher)
{
endpointDispatcher.DispatchRuntime.MessageInspectors.Add(new EndpointBehaviorMessageInspector());
}
public void Validate(ServiceEndpoint serviceEndpoint)
{
return;
}
O exemplo de código a seguir mostra a implementação para System.ServiceModel.Configuration.BehaviorExtensionElement habilitar o uso do comportamento do inspetor de mensagens de um arquivo de configuração.
// BehaviorExtensionElement members
public override Type BehaviorType
{
get { return typeof(EndpointBehaviorMessageInspector); }
}
protected override object CreateBehavior()
{
return new EndpointBehaviorMessageInspector();
}
Por fim, o arquivo de configuração a seguir mostra como o exemplo anterior pode ser usado na configuração.
<configuration>
<system.serviceModel>
<services>
<service
name="Microsoft.WCF.Documentation.SampleService"
behaviorConfiguration="metadataSupport"
>
<host>
<baseAddresses>
<add baseAddress="http://localhost:8080/ServiceMetadata" />
</baseAddresses>
</host>
<endpoint
address="/SampleService"
binding="wsHttpBinding"
behaviorConfiguration="withMessageInspector"
contract="Microsoft.WCF.Documentation.ISampleService"
/>
<endpoint
address="mex"
binding="mexHttpBinding"
contract="IMetadataExchange"
/>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="metadataSupport">
<serviceMetadata httpGetEnabled="true" httpGetUrl=""/>
</behavior>
</serviceBehaviors>
<endpointBehaviors>
<behavior name="withMessageInspector">
<endpointMessageInspector />
</behavior>
</endpointBehaviors>
</behaviors>
<extensions>
<behaviorExtensions>
<add
name="endpointMessageInspector"
type="Microsoft.WCF.Documentation.EndpointBehaviorMessageInspector, HostApplication, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null"
/>
</behaviorExtensions>
</extensions>
</system.serviceModel>
</configuration>
Comentários
Implemente a IEndpointBehavior interface para modificar, examinar ou estender algum aspecto da execução em todo o ponto de extremidade no nível do aplicativo para aplicativos cliente ou de serviço.
Use o AddBindingParameters método para passar dados personalizados em runtime para habilitar associações para dar suporte a comportamentos personalizados.
Use o ApplyClientBehavior método para modificar, examinar ou inserir extensões em um ponto de extremidade em um aplicativo cliente.
Use o ApplyDispatchBehavior método para modificar, examinar ou inserir extensões para execução em todo o ponto de extremidade em um aplicativo de serviço.
Use o Validate método para confirmar se um ServiceEndpoint atende a requisitos específicos. Isso pode ser usado para garantir que um ponto de extremidade tenha uma determinada configuração habilitada, dê suporte a um recurso específico e outros requisitos.
IEndpointBehavior objetos podem usar qualquer um desses métodos, mas geralmente apenas um é importante; nesses casos, os métodos não utilizados podem retornar, não executando nenhuma ação.
Observação
Todos os IEndpointBehavior métodos passam um ServiceEndpoint objeto como um parâmetro. Esse parâmetro é somente para exame; se você modificar o ServiceEndpoint objeto, o comportamento de execução será indefinido.
IEndpointBehavioros objetos normalmente são usados para acessar as várias propriedades do System.ServiceModel.Dispatcher.DispatchRuntime, System.ServiceModel.Dispatcher.DispatchOperatione System.ServiceModel.Dispatcher.EndpointDispatcherSystem.ServiceModel.Dispatcher.ChannelDispatcher objetos em um aplicativo de serviço e no System.ServiceModel.Dispatcher.ClientRuntime aplicativo cliente e System.ServiceModel.Dispatcher.ClientOperation em um aplicativo cliente. Além disso, você pode acessar as propriedades de clientes e serviços duplex usando as propriedades e DispatchRuntime.CallbackClientRuntime as ClientRuntime.CallbackDispatchRuntime propriedades, respectivamente.
Para obter uma descrição das várias propriedades e personalizações disponíveis, consulte Estender o ServiceHost e a Camada de Modelo de Serviço.
Depois que uma personalização é decidida (e a interface de personalização implementada, se necessário) e a IEndpointBehavior decisão é o escopo apropriado da personalização, a personalização deve ser inserida no runtime do Windows Communication Foundation (WCF) implementando IEndpointBehavior e adicionando o comportamento do ponto de extremidade ao runtime.
Há duas maneiras de adicionar o comportamento ao runtime:
Adicione programaticamente o comportamento de ponto de extremidade personalizado à Behaviors propriedade antes da abertura do host de serviço (em um aplicativo de serviço) ou da fábrica de canais (em um aplicativo cliente).
Configure o comportamento usando um arquivo de configuração de aplicativo. Para obter detalhes, consulte <behaviorExtensions>.
Para executar a tarefa de personalização de serviço para a qual se destina, o IEndpointBehavior objeto deve ser adicionado à ServiceEndpoint.Behaviors propriedade antes da construção do runtime de serviço, que ocorre quando ICommunicationObject.Open o método é chamado System.ServiceModel.ServiceHost. Para executar uma tarefa de personalização do cliente, o IEndpointBehavior objeto deve ser adicionado à ServiceEndpoint.Behaviors propriedade antes de chamar o ChannelFactory<TChannel>.CreateChannel método ou o ICommunicationObject.Open método em ChannelFactory<TChannel>.
Métodos
AddBindingParameters(ServiceEndpoint, BindingParameterCollection) |
Implementar para passar dados em runtime para associações a fim de dar suporte ao comportamento personalizado. |
ApplyClientBehavior(ServiceEndpoint, ClientRuntime) |
Implementa uma modificação ou extensão do cliente em todo um ponto de extremidade. |
ApplyDispatchBehavior(ServiceEndpoint, EndpointDispatcher) |
Implementa uma modificação ou extensão do serviço em um ponto de extremidade. |
Validate(ServiceEndpoint) |
Implemente para confirmar se o ponto de extremidade atende a alguns critérios desejados. |