IEndpointBehavior Interface
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.
Implementa métodos que podem ser usados para prolongar o comportamento em tempo de execução de um endpoint, seja num serviço ou numa aplicação cliente.
public interface class IEndpointBehavior
public interface IEndpointBehavior
type IEndpointBehavior = interface
Public Interface IEndpointBehavior
- Derivado
Exemplos
O exemplo de código seguinte mostra a implementação de um comportamento de endpoint que adiciona um System.ServiceModel.Dispatcher.IDispatchMessageInspector objeto numa aplicação de serviço. Neste 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 inspector no sistema de inspeção para todos os endpoints a que o comportamento se aplica, e System.ServiceModel.Configuration.BehaviorExtensionElement para ativar o comportamento do message inspector usando um ficheiro de configuração de aplicação.
O primeiro passo é 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 seguinte mostra a implementação de System.ServiceModel.Configuration.BehaviorExtensionElement para permitir o uso do comportamento do inspetor de mensagens a partir de um ficheiro de configuração.
// BehaviorExtensionElement members
public override Type BehaviorType
{
get { return typeof(EndpointBehaviorMessageInspector); }
}
protected override object CreateBehavior()
{
return new EndpointBehaviorMessageInspector();
}
Finalmente, o ficheiro de configuração seguinte mostra como o exemplo anterior pode ser usado a partir da 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>
Observações
Implemente a IEndpointBehavior interface para modificar, examinar ou estender algum aspeto da execução em todo o endpoint ao nível da aplicação, tanto para aplicações cliente como de serviço.
Use o AddBindingParameters método para passar dados personalizados em tempo de execução para permitir que as ligações suportem comportamentos personalizados.
Use o ApplyClientBehavior método para modificar, examinar ou inserir extensões a um endpoint numa aplicação cliente.
Use o ApplyDispatchBehavior método para modificar, examinar ou inserir extensões para a execução a nível de endpoint numa aplicação de serviço.
Use o Validate método para confirmar que o A ServiceEndpoint cumpre requisitos específicos. Isto pode ser usado para garantir que um endpoint tem uma determinada configuração ativada, suporta uma funcionalidade específica e outros requisitos.
IEndpointBehavior Os objetos podem utilizar qualquer um destes métodos, mas muitas vezes apenas um é importante; nesses casos, os métodos não utilizados podem regressar, sem realizar qualquer ação.
Note
Todos os IEndpointBehavior métodos passam por um ServiceEndpoint objeto como parâmetro. Este parâmetro é apenas para exame; Se modificar o ServiceEndpoint objeto, o comportamento de execução é indefinido.
IEndpointBehavior Os objetos são normalmente usados para aceder às várias propriedades dos System.ServiceModel.Dispatcher.DispatchRuntimeobjetos , System.ServiceModel.Dispatcher.DispatchOperation, System.ServiceModel.Dispatcher.EndpointDispatcher, e System.ServiceModel.Dispatcher.ChannelDispatcher numa aplicação de serviço e no System.ServiceModel.Dispatcher.ClientRuntime e System.ServiceModel.Dispatcher.ClientOperation numa aplicação cliente. Além disso, pode aceder às propriedades dos clientes e serviços duplex usando as ClientRuntime.CallbackDispatchRuntime propriedades e DispatchRuntime.CallbackClientRuntime , respetivamente.
Para uma descrição das várias propriedades e personalizações disponíveis, veja Extensão do ServiceHost e a Camada do Modelo de Serviço.
Uma vez decidida uma personalização (e a interface de personalização implementada, se necessário) e o IEndpointBehavior decidido ser o âmbito adequado de personalização, a personalização deve ser inserida no runtime Windows Communication Foundation (WCF) implementando IEndpointBehavior e adicionando o comportamento do endpoint ao runtime.
Existem duas formas de adicionar o comportamento ao tempo de execução:
Adicione programaticamente o comportamento personalizado do endpoint à Behaviors propriedade antes da abertura do host de serviço (numa aplicação de serviço) ou da channel factory (numa aplicação cliente).
Configure o comportamento usando um ficheiro de configuração de aplicação. Para mais detalhes, veja <behaviorExtensions>.
Para realizar a tarefa de personalização do serviço para a qual se destina, o IEndpointBehavior objeto deve ser adicionado à ServiceEndpoint.Behaviors propriedade antes da construção do tempo de execução do serviço, que ocorre quando ICommunicationObject.Open o método é chamado em System.ServiceModel.ServiceHost. Para realizar 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
| Name | Description |
|---|---|
| AddBindingParameters(ServiceEndpoint, BindingParameterCollection) |
Implemente o passe de dados em tempo de execução para bindings para suportar comportamentos personalizados. |
| ApplyClientBehavior(ServiceEndpoint, ClientRuntime) |
Implementa uma modificação ou extensão do cliente através de um endpoint. |
| ApplyDispatchBehavior(ServiceEndpoint, EndpointDispatcher) |
Implementa uma modificação ou extensão do serviço através de um endpoint. |
| Validate(ServiceEndpoint) |
Implemente para confirmar que o endpoint cumpre alguns critérios pretendidos. |