IEndpointBehavior Interface

Definição

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.

Aplica-se a