IEndpointBehavior.ApplyDispatchBehavior Metoda
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
Implementuje úpravu nebo rozšíření služby v rámci koncového bodu.
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
Koncový bod, který zpřístupňuje kontrakt.
- endpointDispatcher
- EndpointDispatcher
Dispečer koncového bodu, který se má upravit nebo rozšířit.
Příklady
Následující příklad kódu ukazuje implementaci chování koncového bodu, které přidá System.ServiceModel.Dispatcher.IDispatchMessageInspector objekt do aplikace služby. V tomto případě EndpointBehaviorMessageInspector
třída implementuje System.ServiceModel.Dispatcher.IDispatchMessageInspector kontrolu příchozí a odchozí zprávy, IEndpointBehavior rozhraní pro vložení třídy inspektoru do kontrolního systému pro všechny koncové body, na které se chování vztahuje, a System.ServiceModel.Configuration.BehaviorExtensionElement povolení chování inspektoru zpráv pomocí konfiguračního souboru aplikace.
Prvním krokem je implementace inspektoru zpráv.
// 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.");
}
Následující příklad kódu ukazuje použití ApplyDispatchBehavior metody k přidání inspektoru zpráv do DispatchRuntime.MessageInspectors vlastnosti.
// 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;
}
Následující příklad kódu ukazuje implementaci System.ServiceModel.Configuration.BehaviorExtensionElement , aby bylo možné povolit použití chování inspektoru zpráv z konfiguračního souboru.
// BehaviorExtensionElement members
public override Type BehaviorType
{
get { return typeof(EndpointBehaviorMessageInspector); }
}
protected override object CreateBehavior()
{
return new EndpointBehaviorMessageInspector();
}
Nakonec následující konfigurační soubor ukazuje, jak lze předchozí příklad použít z konfigurace.
<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>
Poznámky
Implementujte metodu ApplyDispatchBehavior pro zobrazení, úpravu nebo rozšíření modulu runtime služby napříč všemi zprávami nebo pro konkrétní operace v koncovém bodu. Podrobnosti o tom, jaké vlastní nastavení můžete dělat v aplikaci služby, najdete System.ServiceModel.Dispatcher.DispatchRuntime a System.ServiceModel.Dispatcher.DispatchOperation.
Doporučuje se ApplyDispatchBehavior , aby metoda vyvolala NotImplementedException výjimku, pokud je chování určené pouze pro použití v klientské aplikaci.
Všimněte si, že při použití kontraktu zpětného volání (jedna operace v každém směru) může existovat dva operace se stejným názvem v popisu. Pokud iterujete operacemi, musíte korelovat směr zprávy mezi koncovým bodem System.ServiceModel.Dispatcher.DispatchRuntime a tím, co vrátí DispatchRuntime.CallbackClientRuntime vlastnost.
Kromě toho, protože jiné chování již mohlo být přidáno nebo odebráno některé operace z modulu runtime, neexistuje žádná záruka, že existuje stejný počet operací v popisu, jako jsou System.ServiceModel.Dispatcher.DispatchOperation objekty ve DispatchRuntime.Operations vlastnosti.