IEndpointBehavior.ApplyDispatchBehavior Metoda
Definicja
Ważne
Niektóre informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany przed wydaniem. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
Implementuje modyfikację lub rozszerzenie usługi w punkcie końcowym.
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)
Parametry
- endpoint
- ServiceEndpoint
Punkt końcowy, który uwidacznia kontrakt.
- endpointDispatcher
- EndpointDispatcher
Dyspozytor punktu końcowego, który ma zostać zmodyfikowany lub rozszerzony.
Przykłady
Poniższy przykład kodu przedstawia implementację zachowania punktu końcowego, które dodaje System.ServiceModel.Dispatcher.IDispatchMessageInspector obiekt w aplikacji usługi. W takim przypadku EndpointBehaviorMessageInspector
klasa implementuje System.ServiceModel.Dispatcher.IDispatchMessageInspector inspekcję komunikatu przychodzącego i wychodzącego, IEndpointBehavior interfejs umożliwiający wstawienie klasy inspektora do systemu inspekcji dla wszystkich punktów końcowych, do których ma zastosowanie zachowanie, oraz System.ServiceModel.Configuration.BehaviorExtensionElement włączenie zachowania inspektora komunikatów przy użyciu pliku konfiguracji aplikacji.
Pierwszym krokiem jest zaimplementowanie inspektora komunikatów.
// 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.");
}
W następnym przykładzie kodu przedstawiono użycie ApplyDispatchBehavior metody w celu dodania inspektora DispatchRuntime.MessageInspectors komunikatów do właściwości.
// 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;
}
Poniższy przykład kodu przedstawia implementację System.ServiceModel.Configuration.BehaviorExtensionElement w celu umożliwienia korzystania z zachowania inspektora komunikatów z pliku konfiguracji.
// BehaviorExtensionElement members
public override Type BehaviorType
{
get { return typeof(EndpointBehaviorMessageInspector); }
}
protected override object CreateBehavior()
{
return new EndpointBehaviorMessageInspector();
}
Na koniec poniższy plik konfiguracji pokazuje, jak można użyć poprzedniego przykładu z konfiguracji.
<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>
Uwagi
Zaimplementuj metodę ApplyDispatchBehavior wyświetlania, modyfikowania lub rozszerzania środowiska uruchomieniowego usługi we wszystkich komunikatach lub dla określonych operacji w punkcie końcowym. Aby uzyskać szczegółowe informacje na temat dostosowań, które można wykonać w aplikacji usługi, zobacz System.ServiceModel.Dispatcher.DispatchRuntime i System.ServiceModel.Dispatcher.DispatchOperation.
Zaleca się, aby ApplyDispatchBehavior metoda zgłaszała NotImplementedException wyjątek, jeśli zachowanie jest przeznaczone tylko do użycia w aplikacji klienckiej.
Należy pamiętać, że w opisie mogą istnieć dwie operacje o tej samej nazwie podczas korzystania z kontraktu wywołania zwrotnego (jedna operacja w każdym kierunku). Jeśli wykonujesz iterację przez operacje, musisz skorelować kierunek komunikatu między punktem końcowym System.ServiceModel.Dispatcher.DispatchRuntime a tym, co jest zwracane przez DispatchRuntime.CallbackClientRuntime właściwość.
Ponadto, ponieważ inne zachowania mogły już dodać lub usunąć niektóre operacje ze środowiska uruchomieniowego, nie ma gwarancji, że istnieje taka sama liczba operacji w opisie, jak istnieją System.ServiceModel.Dispatcher.DispatchOperation obiekty we DispatchRuntime.Operations właściwości.