Udostępnij za pośrednictwem


IEndpointBehavior.ApplyDispatchBehavior Metoda

Definicja

Implementuje modyfikację lub rozszerzenie usługi w punkcie końcowym.

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

Punkt końcowy, który uwidacznia kontrakt.

endpointDispatcher
EndpointDispatcher

Dyspozytor punktu końcowego, który ma zostać zmodyfikowany lub rozszerzony.

Przykłady

Poniższy przykład kodu przedstawia implementację zachowania punktu końcowego, które dodaje System.ServiceModel.Dispatcher.IDispatchMessageInspector obiekt w aplikacji usługi. W takim przypadku EndpointBehaviorMessageInspector klasa implementuje System.ServiceModel.Dispatcher.IDispatchMessageInspector inspekcję komunikatu przychodzącego i wychodzącego, IEndpointBehavior interfejs umożliwiający wstawienie klasy inspektora do systemu inspekcji dla wszystkich punktów końcowych, do których ma zastosowanie zachowanie, oraz System.ServiceModel.Configuration.BehaviorExtensionElement włączenie zachowania inspektora komunikatów przy użyciu pliku konfiguracji aplikacji.

Pierwszym krokiem jest zaimplementowanie inspektora komunikatów.

// 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.");
}

W następnym przykładzie kodu przedstawiono użycie ApplyDispatchBehavior metody w celu dodania inspektora DispatchRuntime.MessageInspectors komunikatów do właściwości.

// 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;
}

Poniższy przykład kodu przedstawia implementację System.ServiceModel.Configuration.BehaviorExtensionElement w celu umożliwienia korzystania z zachowania inspektora komunikatów z pliku konfiguracji.

// BehaviorExtensionElement members
public override Type BehaviorType
{
  get { return typeof(EndpointBehaviorMessageInspector); }
}

protected override object CreateBehavior()
{
  return new EndpointBehaviorMessageInspector();
}

Na koniec poniższy plik konfiguracji pokazuje, jak można użyć poprzedniego przykładu z konfiguracji.

<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>

Uwagi

Zaimplementuj metodę ApplyDispatchBehavior wyświetlania, modyfikowania lub rozszerzania środowiska uruchomieniowego usługi we wszystkich komunikatach lub dla określonych operacji w punkcie końcowym. Aby uzyskać szczegółowe informacje na temat dostosowań, które można wykonać w aplikacji usługi, zobacz System.ServiceModel.Dispatcher.DispatchRuntime i System.ServiceModel.Dispatcher.DispatchOperation.

Zaleca się, aby ApplyDispatchBehavior metoda zgłaszała NotImplementedException wyjątek, jeśli zachowanie jest przeznaczone tylko do użycia w aplikacji klienckiej.

Należy pamiętać, że w opisie mogą istnieć dwie operacje o tej samej nazwie podczas korzystania z kontraktu wywołania zwrotnego (jedna operacja w każdym kierunku). Jeśli wykonujesz iterację przez operacje, musisz skorelować kierunek komunikatu między punktem końcowym System.ServiceModel.Dispatcher.DispatchRuntime a tym, co jest zwracane przez DispatchRuntime.CallbackClientRuntime właściwość.

Ponadto, ponieważ inne zachowania mogły już dodać lub usunąć niektóre operacje ze środowiska uruchomieniowego, nie ma gwarancji, że istnieje taka sama liczba operacji w opisie, jak istnieją System.ServiceModel.Dispatcher.DispatchOperation obiekty we DispatchRuntime.Operations właściwości.

Dotyczy