IEndpointBehavior.ApplyDispatchBehavior Methode

Definition

Implementiert eine Änderung oder eine Erweiterung des Diensts in einem Endpunkt.

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)

Parameter

endpoint
ServiceEndpoint

Der Endpunkt, der den Vertrag verfügbar macht.

endpointDispatcher
EndpointDispatcher

Der Endpunktverteiler, der geändert oder erweitert werden soll.

Beispiele

Im folgenden Codebeispiel wird eine Implementierung eines Endpunktverhaltens gezeigt, mit der ein System.ServiceModel.Dispatcher.IDispatchMessageInspector-Objekt in eine Dienstanwendung einfügt wird. In diesem Beispiel implementiert die EndpointBehaviorMessageInspector-Klasse System.ServiceModel.Dispatcher.IDispatchMessageInspector, um die eingehende und ausgehende Nachricht zu prüfen, außerdem die IEndpointBehavior-Schnittstelle, um die Inspektorklasse in das Inspektionssystem für alle Endpunkte einzufügen, für die das Verhalten gilt, und das System.ServiceModel.Configuration.BehaviorExtensionElement, um das Nachrichteninspektorverhalten mithilfe einer Anwendungskonfigurationsdatei zu aktivieren.

Der erste Schritt ist die Implementierung des Nachrichteninspektors.

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

Im folgenden Codebeispiel wird die Verwendung der ApplyDispatchBehavior-Methode zum Hinzufügen des Nachrichteninspektors zur DispatchRuntime.MessageInspectors-Eigenschaft veranschaulicht.

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

Im folgenden Codebeispiel wird eine Implementierung von System.ServiceModel.Configuration.BehaviorExtensionElement gezeigt, mit der die Verwendung des Nachrichteninspektorverhaltens anhand einer Konfigurationsdatei ermöglicht wird.

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

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

Schließlich zeigt die folgende Konfigurationsdatei, wie das vorangehende Beispiel in der Konfiguration verwendet werden kann.

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

Hinweise

Implementieren Sie die ApplyDispatchBehavior-Methode, um die Dienstlaufzeit für alle Nachrichten oder bestimmte Vorgänge in einem Endpunkt anzuzeigen, zu ändern oder zu erweitern. Ausführliche Informationen über Anpassungsmöglichkeiten in Dienstanwendungen finden Sie unter System.ServiceModel.Dispatcher.DispatchRuntime und System.ServiceModel.Dispatcher.DispatchOperation.

Die ApplyDispatchBehavior-Methode sollte eine NotImplementedException-Ausnahme auslösen, wenn das Verhalten nur zur Verwendung in einer Clientanwendung vorgesehen ist.

Bei Verwendung eines Rückrufvertrags (ein Vorgang in jeder Richtung) können in der Beschreibung zwei Vorgänge mit dem gleichen Namen vorhanden sein. Wenn Sie Vorgänge mehrmals ausführen, müssen die Nachrichtenrichtung der Endpunkt-System.ServiceModel.Dispatcher.DispatchRuntime und die Richtung, die von der DispatchRuntime.CallbackClientRuntime-Eigenschaft zurückgegeben wird, übereinstimmen.

Da andere Verhalten unter Umständen bereits einige Vorgänge hinzugefügt oder aus der Laufzeit entfernt haben, ist zudem nicht gewährleistet, dass die Anzahl der in der Beschreibung enthaltenen Vorgänge mit der Anzahl der System.ServiceModel.Dispatcher.DispatchOperation-Objekte, die in der DispatchRuntime.Operations-Eigenschaft enthalten sind, übereinstimmt.

Gilt für