Partilhar via


IEndpointBehavior Interface

Definição

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.

Aplica-se a