Sdílet prostřednictvím


IEndpointBehavior.ApplyDispatchBehavior Metoda

Definice

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.

Platí pro