IEndpointBehavior.ApplyDispatchBehavior Methode
Definitie
Belangrijk
Bepaalde informatie heeft betrekking op een voorlopige productversie die aanzienlijk kan worden gewijzigd voordat deze wordt uitgebracht. Microsoft biedt geen enkele expliciete of impliciete garanties met betrekking tot de informatie die hier wordt verstrekt.
Implementeert een wijziging of uitbreiding van de service in een eindpunt.
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)
Parameters
- endpoint
- ServiceEndpoint
Het eindpunt waarmee het contract wordt weergegeven.
- endpointDispatcher
- EndpointDispatcher
De eindpunt-dispatcher die moet worden gewijzigd of uitgebreid.
Voorbeelden
In het volgende codevoorbeeld ziet u de implementatie van een eindpuntgedrag waarmee een System.ServiceModel.Dispatcher.IDispatchMessageInspector object in een servicetoepassing wordt toegevoegd. In dit geval wordt de EndpointBehaviorMessageInspector klasse geïmplementeerd System.ServiceModel.Dispatcher.IDispatchMessageInspector om het inkomende en uitgaande bericht te inspecteren, de IEndpointBehavior interface om de inspectorklasse in te voegen in het inspectiesysteem voor alle eindpunten waarop het gedrag van toepassing is en het System.ServiceModel.Configuration.BehaviorExtensionElement gedrag van de berichtcontrole in te schakelen met behulp van een toepassingsconfiguratiebestand.
De eerste stap is het implementeren van de berichtcontrole.
// 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.");
}
In het volgende codevoorbeeld ziet u het gebruik van de ApplyDispatchBehavior methode om de berichtcontrole toe te voegen aan de DispatchRuntime.MessageInspectors eigenschap.
// 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;
}
In het volgende codevoorbeeld ziet u de implementatie om System.ServiceModel.Configuration.BehaviorExtensionElement het gebruik van het gedrag van de berichtcontrole vanuit een configuratiebestand in te schakelen.
// BehaviorExtensionElement members
public override Type BehaviorType
{
get { return typeof(EndpointBehaviorMessageInspector); }
}
protected override object CreateBehavior()
{
return new EndpointBehaviorMessageInspector();
}
Ten slotte ziet u in het volgende configuratiebestand hoe het voorgaande voorbeeld kan worden gebruikt vanuit de configuratie.
<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>
Opmerkingen
Implementeer de ApplyDispatchBehavior methode om de serviceruntime in alle berichten of voor specifieke bewerkingen in een eindpunt weer te geven, te wijzigen of uit te breiden. Zie en System.ServiceModel.Dispatcher.DispatchOperationvoor meer informatie over de aanpassingen die u in een servicetoepassing System.ServiceModel.Dispatcher.DispatchRuntime kunt uitvoeren.
Het wordt aanbevolen dat de ApplyDispatchBehavior methode een NotImplementedException uitzondering genereert als het gedrag alleen is bedoeld voor gebruik in een clienttoepassing.
Houd er rekening mee dat er twee bewerkingen met dezelfde naam in de beschrijving kunnen zijn wanneer u een callback-contract gebruikt (één bewerking in elke richting). Als u bewerkingen doorloopt, moet u de berichtrichting tussen het eindpunt System.ServiceModel.Dispatcher.DispatchRuntime correleren en wat wordt geretourneerd door de DispatchRuntime.CallbackClientRuntime eigenschap.
Omdat andere gedragingen mogelijk al bepaalde bewerkingen uit de runtime hebben toegevoegd of verwijderd, is er bovendien geen garantie dat er hetzelfde aantal bewerkingen in de beschrijving is als er objecten in de DispatchRuntime.Operations eigenschap zijnSystem.ServiceModel.Dispatcher.DispatchOperation.