Compartilhar via


IEndpointBehavior.ApplyDispatchBehavior Método

Definição

Implementa uma modificação ou extensão do serviço em um ponto de extremidade.

public:
 void ApplyDispatchBehavior(System::ServiceModel::Description::ServiceEndpoint ^ endpoint, System::ServiceModel::Dispatcher::EndpointDispatcher ^ endpointDispatcher);
public void ApplyDispatchBehavior (System.ServiceModel.Description.ServiceEndpoint endpoint, System.ServiceModel.Dispatcher.EndpointDispatcher endpointDispatcher);
abstract member ApplyDispatchBehavior : System.ServiceModel.Description.ServiceEndpoint * System.ServiceModel.Dispatcher.EndpointDispatcher -> unit
Public Sub ApplyDispatchBehavior (endpoint As ServiceEndpoint, endpointDispatcher As EndpointDispatcher)

Parâmetros

endpoint
ServiceEndpoint

O ponto de extremidade que expõe o contrato.

endpointDispatcher
EndpointDispatcher

O dispatcher do ponto de extremidade a ser modificado ou estendido.

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 inspector no sistema de inspeção para todos os pontos de extremidade aos quais o comportamento se aplica e para System.ServiceModel.Configuration.BehaviorExtensionElement habilitar o 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 de System.ServiceModel.Configuration.BehaviorExtensionElement para 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 o ApplyDispatchBehavior método para exibir, modificar ou estender o runtime de serviço em todas as mensagens ou para operações específicas em um ponto de extremidade. Para obter detalhes sobre quais personalizações você pode fazer em um aplicativo de serviço, consulte System.ServiceModel.Dispatcher.DispatchRuntime e System.ServiceModel.Dispatcher.DispatchOperation.

É recomendável que o ApplyDispatchBehavior método gere uma NotImplementedException exceção se o comportamento for destinado apenas ao uso em um aplicativo cliente.

Observe que pode haver duas operações com o mesmo nome na descrição ao usar um contrato de retorno de chamada (uma operação em cada direção). Se você estiver iterando por meio de operações, deverá correlacionar a direção da mensagem entre o ponto System.ServiceModel.Dispatcher.DispatchRuntime de extremidade e o que é retornado pela DispatchRuntime.CallbackClientRuntime propriedade .

Além disso, como outros comportamentos podem já ter adicionado ou removido algumas operações do runtime, não há nenhuma garantia de que haja o mesmo número de operações na descrição que há System.ServiceModel.Dispatcher.DispatchOperation objetos na DispatchRuntime.Operations propriedade .

Aplica-se a