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.