IEndpointBehavior.ApplyDispatchBehavior Méthode

Définition

Implémente une modification ou une extension du service sur l’intégralité du point de terminaison.

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)

Paramètres

endpoint
ServiceEndpoint

Point de terminaison qui expose le contrat.

endpointDispatcher
EndpointDispatcher

Répartiteur de points de terminaison à modifier ou étendre.

Exemples

L'exemple de code suivant montre l'implémentation d'un comportement de point de terminaison qui ajoute un objet System.ServiceModel.Dispatcher.IDispatchMessageInspector dans une application de service. Dans ce cas, la classe EndpointBehaviorMessageInspector implémente System.ServiceModel.Dispatcher.IDispatchMessageInspector pour inspecter le message entrant et sortant, l'interface IEndpointBehavior pour insérer la classe Inspector dans le système d'inspection pour tous les points de terminaison auxquels s'applique le comportement et l'System.ServiceModel.Configuration.BehaviorExtensionElement pour activer le comportement d'un inspecteur de message à l'aide d'un fichier de configuration de l'application.

La première étape consiste à implémenter l'inspecteur de message.

// 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.");
}

L'exemple de code suivant montre l'utilisation de la méthode ApplyDispatchBehavior pour ajouter l'inspecteur de message à la propriété DispatchRuntime.MessageInspectors.

// 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;
}

L'exemple de code suivant montre l'implémentation de l'System.ServiceModel.Configuration.BehaviorExtensionElement pour activer l'utilisation du comportement d'un inspecteur de message à partir d'un fichier de configuration.

// BehaviorExtensionElement members
public override Type BehaviorType
{
  get { return typeof(EndpointBehaviorMessageInspector); }
}

protected override object CreateBehavior()
{
  return new EndpointBehaviorMessageInspector();
}

Enfin, le fichier de configuration suivant montre comment l'exemple précédent peut être utilisé à partir de la configuration.

<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>

Remarques

Implémentez la méthode ApplyDispatchBehavior pour afficher, modifier ou étendre l'exécution de service sur l'intégralité des messages ou pour des opérations spécifiques dans un point de terminaison. Pour plus d'informations sur les personnalisations que vous pouvez effectuer dans une application de service, consultez System.ServiceModel.Dispatcher.DispatchRuntime et System.ServiceModel.Dispatcher.DispatchOperation.

Il est recommandé que la méthode ApplyDispatchBehavior lève une exception NotImplementedException si le comportement est uniquement destiné à une utilisation dans une application cliente.

Notez que, lors de l'utilisation d'un contrat de rappel, deux opérations peuvent avoir le même nom dans la description (une opération dans chaque direction). Si vous itérez au sein des opérations, vous devez corréler la direction de message entre le point de terminaison System.ServiceModel.Dispatcher.DispatchRuntime et ce qui est retourné par la propriété DispatchRuntime.CallbackClientRuntime.

De plus, étant donné que d'autres comportements ont peut-être déjà ajouté ou supprimé des opérations de l'exécution, rien ne garantit que le nombre d'opérations dans les descriptions soit similaire à celui des objets System.ServiceModel.Dispatcher.DispatchOperation dans la propriété DispatchRuntime.Operations.

S’applique à