IEndpointBehavior.ApplyDispatchBehavior Метод

Определение

Реализует изменение или расширение службы по всей конечной точке.

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)

Параметры

endpoint
ServiceEndpoint

Конечная точка, предоставляющая контракт.

endpointDispatcher
EndpointDispatcher

Изменяемый или расширяемый диспетчер конечной точки.

Примеры

В следующем примере кода показана реализация поведения конечной точки, которая добавляет объект System.ServiceModel.Dispatcher.IDispatchMessageInspector в приложение службы. В данном случае класс EndpointBehaviorMessageInspector реализует System.ServiceModel.Dispatcher.IDispatchMessageInspector, чтобы проверить входящие и исходящие сообщения, интерфейсIEndpointBehavior для вставки класса инспектора в систему проверки всех конечных точек, к которым применимы поведения, а также System.ServiceModel.Configuration.BehaviorExtensionElement, чтобы включить поддержку поведений инспектора сообщений, используя файл конфигурации приложения.

Сначала необходимо реализовать инспектор сообщений.

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

В следующем примере кода показано использование метода ApplyDispatchBehavior для добавления инспектора сообщений в свойство DispatchRuntime.MessageInspectors.

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

В следующем примере кода показана реализация System.ServiceModel.Configuration.BehaviorExtensionElement, чтобы разрешить использование поведения инспектора сообщений из файла конфигурации.

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

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

Наконец, в следующем файле конфигурации показано, как можно использовать предыдущий пример из конфигурации.

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

Комментарии

Метод ApplyDispatchBehavior реализуется для просмотра, изменения или расширения среды выполнения службы для всех сообщений или для конкретных операций в конечной точке. Сведения о том, какие настройки можно выполнить в приложении службы, см. в разделах System.ServiceModel.Dispatcher.DispatchRuntime и System.ServiceModel.Dispatcher.DispatchOperation.

Рекомендуется, чтобы метод ApplyDispatchBehavior вызвал исключение NotImplementedException, если поведение предназначено для использования только в клиентском приложении.

Следует учесть, что при использовании контракта обратного вызова (один оператор на каждом направлениИ) в описании могут существовать две операции с одним именем. При выполнении итерации по операциям необходимо скоординировать направление сообщения между конечной точкой System.ServiceModel.Dispatcher.DispatchRuntime и тем, что возвращает свойство DispatchRuntime.CallbackClientRuntime.

Кроме того, поскольку другие поведения, возможно, уже добавили или удалили некоторые операции из среды выполнения, нет никакой гарантии, что в описании имеется такое же количество операций, что и количество объектов System.ServiceModel.Dispatcher.DispatchOperation в свойстве DispatchRuntime.Operations.

Применяется к