Sdílet prostřednictvím


IEndpointBehavior.ApplyDispatchBehavior Metoda

Definice

Implementuje změnu 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 v aplikaci 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 kontroly 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, naleznete System.ServiceModel.Dispatcher.DispatchRuntime a System.ServiceModel.Dispatcher.DispatchOperation.

Doporučuje se ApplyDispatchBehavior , aby metoda vyvolala NotImplementedException výjimku, pokud je chování určeno 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 dvě 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 je vráceno DispatchRuntime.CallbackClientRuntime vlastností.

Kromě toho, protože jiné chování již bylo 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 System.ServiceModel.Dispatcher.DispatchOperation objekty ve DispatchRuntime.Operations vlastnosti.

Platí pro