IEndpointBehavior.ApplyDispatchBehavior Methode

Definitie

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.

Van toepassing op