IEndpointBehavior Schnittstelle
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
Implementiert Methoden, die verwendet werden können, um das Laufzeitverhalten eines Endpunkts in einer Dienst- oder Clientanwendung zu erweitern.
public interface class IEndpointBehavior
public interface IEndpointBehavior
type IEndpointBehavior = interface
Public Interface IEndpointBehavior
- Abgeleitet
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
Implementiert die IEndpointBehavior-Schnittstelle, um Aspekte der Endpunkt-weiten Ausführung auf Anwendungsebene für Client- oder Dienstanwendungen zu ändern, zu überprüfen oder zu erweitern.
Verwenden Sie die AddBindingParameters-Methode, um benutzerdefinierte Daten zur Laufzeit zu übergeben, die bewirken, dass Bindungen benutzerdefiniertes Verhalten unterstützen.
Verwenden Sie die ApplyClientBehavior-Methode, um in einer Clientanwendung Erweiterungen eines Endpunkts zu ändern, zu überprüfen oder ihm Erweiterungen hinzuzufügen.
Verwenden Sie die ApplyDispatchBehavior-Methode, um in einer Dienstanwendung Erweiterungen einer Endpunkt-weiten Ausführung zu ändern, zu überprüfen oder ihr hinzuzufügen.
Verwenden Sie die Validate-Methode, um zu prüfen, ob ServiceEndpoint bestimmte Anforderungen erfüllt. Dies kann zur Prüfung verwendet werden, ob für einen Endpunkt eine bestimmte Konfigurationseinstellung aktiviert wurde und ob er bestimmte Funktionen und andere Anforderungen unterstützt.
IEndpointBehavior -Objekte können eine dieser Methoden verwenden, aber oft ist nur eine wichtig. In solchen Fällen können die nicht verwendeten Methoden zurückgeben, wodurch keine Aktion ausgeführt wird.
Hinweis
Alle IEndpointBehavior-Methoden übergeben ein ServiceEndpoint-Objekt als Parameter. Dieser Parameter dient nur für die Prüfung; wenn Sie das ServiceEndpoint-Objekt ändern, ist das Ausführungsverhalten nicht definiert.
IEndpointBehavior-Objekte werden in der Regel verwendet, um auf die verschiedenen Eigenschaften der Objekte System.ServiceModel.Dispatcher.DispatchRuntime, System.ServiceModel.Dispatcher.DispatchOperation, System.ServiceModel.Dispatcher.EndpointDispatcher und System.ServiceModel.Dispatcher.ChannelDispatcher in einer Dienstanwendung und System.ServiceModel.Dispatcher.ClientRuntime und System.ServiceModel.Dispatcher.ClientOperation in einer Clientanwendung zuzugreifen. Außerdem können Sie auf die Eigenschaften von Duplexclients und -diensten mithilfe der ClientRuntime.CallbackDispatchRuntime-Eigenschaft bzw. der DispatchRuntime.CallbackClientRuntime-Eigenschaft zugreifen.
Eine Beschreibung der verschiedenen verfügbaren Eigenschaften und Anpassungen finden Sie unter Erweitern von ServiceHost und Dienstmodellebene.
Nachdem eine Anpassung beschlossen wurde (und die Anpassungsschnittstelle bei Bedarf implementiert wurde) und IEndpointBehavior entschieden wurde, dass der geeignete Anpassungsbereich ist, muss die Anpassung in die Wcf-Runtime (Windows Communication Foundation) eingefügt werden, indem das Endpunktverhalten implementiert IEndpointBehavior und der Runtime hinzugefügt wird.
Es gibt zwei Möglichkeiten, das Verhalten der Laufzeit hinzuzufügen:
Fügen Sie das benutzerdefinierte Endpunktverhalten den Behaviors-Eigenschaften vor dem Öffnen des Diensthosts (in einer Dienstanwendung) bzw. der Kanalfactory (in einer Clientanwendung) hinzu.
Konfigurieren Sie das Verhalten mithilfe einer Anwendungskonfigurationsdatei. Weitere Informationen finden Sie unter <behaviorExtensions>.
Um eine Dienstanpassungsaufgabe auszuführen, muss das entsprechende IEndpointBehavior-Objekt der ServiceEndpoint.Behaviors-Eigenschaft vor der Erstellung der Dienstlaufzeit hinzugefügt werden, was erfolgt, wenn die ICommunicationObject.Open-Methode für System.ServiceModel.ServiceHost aufgerufen wird. Um eine Clientanpassungsaufgabe auszuführen, muss das IEndpointBehavior-Objekt der ServiceEndpoint.Behaviors-Eigenschaft hinzugefügt werden, bevor die ChannelFactory<TChannel>.CreateChannel-Methode bzw. die ICommunicationObject.Open-Methode für ChannelFactory<TChannel> aufgerufen wird.
Methoden
AddBindingParameters(ServiceEndpoint, BindingParameterCollection) |
Wird implementiert, um Daten zur Laufzeit an Bindungen zu übergeben und damit benutzerdefiniertes Verhalten zu unterstützen. |
ApplyClientBehavior(ServiceEndpoint, ClientRuntime) |
Implementiert eine Änderung oder Erweiterung des Clients in einem Endpunkt. |
ApplyDispatchBehavior(ServiceEndpoint, EndpointDispatcher) |
Implementiert eine Änderung oder eine Erweiterung des Diensts in einem Endpunkt. |
Validate(ServiceEndpoint) |
Implementieren Sie dies, um zu prüfen, ob der Endpunkt bestimmte Kriterien erfüllt. |