Поделиться через


Расширение клиентов

В вызывающем приложении уровень модели службы отвечает за преобразование вызовов метода в код приложения в исходящие сообщения, отправку их в базовые каналы, преобразование результатов обратно в возвращаемые значения и параметры в коде приложения и возврат результатов обратно вызывающему объекту. Расширения модели служб изменяют или реализуют поведение выполнения или взаимодействия и функции, связанные с функциями клиента или диспетчера, пользовательскими поведениями, перехватом сообщений и параметров и другими функциями расширяемости.

В этом разделе описывается, как использовать ClientRuntime и ClientOperation классы в клиентском приложении Windows Communication Foundation (WCF) для изменения поведения выполнения по умолчанию клиента WCF или перехвата или изменения сообщений, параметров или возврата значений до или последующего их отправки или извлечения из слоя канала. Дополнительные сведения о расширении среды выполнения службы см. в разделе " Расширение диспетчеров". Дополнительные сведения о поведении, изменяющих и вставляющих объекты настройки в среду выполнения клиента, см. в разделе "Настройка и расширение среды выполнения с помощью поведения".

Клиенты

На клиенте клиентский объект WCF или канал клиента преобразует вызовы метода в исходящие сообщения и входящие сообщения в результаты операции, возвращаемые вызывающей приложению. (Дополнительные сведения о типах клиентов см. в разделе " Архитектура клиента WCF".)

Типы клиентов WCF имеют типы среды выполнения, обрабатывающие эту функциональность уровня конечной точки и операций. При вызове операции компонент ClientOperation преобразует исходящие объекты в сообщение, обрабатывает перехватчики, подтверждает, что исходящий вызов соответствует целевому контракту, и передает исходящее сообщение компоненту ClientRuntime, который отвечает за создание и управление исходящими каналами (и управление входящими каналами в случае дуплексных служб), обработку дополнительных исходящих сообщений (например, изменение заголовка), обработку перехватчиков сообщений в обоих направлениях и маршрутизацию входящих дуплексных вызовов к соответствующему объекту на стороне клиента DispatchRuntime. Обе ClientOperation и ClientRuntime предоставляют аналогичные услуги, когда сообщения (включая ошибки) возвращаются клиенту.

Эти два класса среды выполнения являются основным расширением для настройки обработки клиентских объектов и каналов WCF. Класс ClientRuntime позволяет пользователям перехватывать и расширять выполнение клиента во всех сообщениях контракта. Класс ClientOperation позволяет пользователям перехватывать и расширять выполнение действий клиента для всех сообщений в данной операции.

Изменение свойств или вставка настроек выполняется с помощью поведения контракта, конечной точки и операций. Дополнительные сведения об использовании этих типов поведения для выполнения настроек среды выполнения клиента см. в разделе "Настройка и расширение среды выполнения с помощью поведения".

Сценарии

Существует ряд причин расширения клиентской системы, в том числе:

Использование класса ClientRuntime

Класс ClientRuntime — это точка расширяемости, в которую можно добавить объекты расширения, которые перехватывают сообщения и расширяют поведение клиента. Объекты перехвата могут обрабатывать все сообщения в определенном контракте, обрабатывать только сообщения для определенных операций, выполнять инициализацию пользовательского канала и реализовывать другое поведение пользовательского клиентского приложения.

  • Свойство CallbackDispatchRuntime возвращает объект среды выполнения диспетчера для клиентов обратного вызова, инициированных службой.

  • Свойство OperationSelector принимает объект пользовательского селектора операций.

  • Свойство ChannelInitializers включает добавление инициализатора канала, который может проверять или изменять клиентский канал.

  • Свойство Operations получает коллекцию ClientOperation объектов, к которым можно добавить пользовательские перехватчики сообщений, которые предоставляют функциональные возможности, относящиеся к сообщениям этой операции.

  • Свойство ManualAddressing позволяет приложению отключить некоторые заголовки автоматической адресации для прямого управления адресациями.

  • Свойство Via задает значение назначения сообщения на уровне транспорта для поддержки посредников и других сценариев.

  • Свойство MessageInspectors получает коллекцию объектов, в которую можно добавить пользовательские перехватчики сообщений для всех сообщений, передаваемых IClientMessageInspector через клиент WCF.

Кроме того, существует ряд других свойств, которые извлекают сведения о контракте:

Если клиент WCF является дуплексным клиентом WCF, следующие свойства также извлекают сведения о клиенте WCF обратного вызова:

Чтобы расширить работу клиента WCF по всему клиенту WCF, проверьте или проанализируйте свойства, доступные в классе ClientRuntime, чтобы выяснить, создают ли нужные функции путем изменения свойства или реализации интерфейса и добавления его в свойство. Выбрав определенное расширение для сборки, вставьте расширение в соответствующее ClientRuntime свойство, реализуя поведение клиента, которое предоставляет доступ к ClientRuntime классу при вызове.

Пользовательские объекты расширения можно вставить в коллекцию, используя поведение операции (объект, который реализует IOperationBehavior), поведение контракта (объект, который реализует IContractBehavior), или поведение конечной точки (объект, который реализует IEndpointBehavior). Объект поведения установки добавляется в соответствующую коллекцию поведения программным способом, декларативно (путем реализации пользовательского атрибута) или путем реализации пользовательского BehaviorExtensionElement объекта, чтобы разрешить вставку поведения с помощью файла конфигурации приложения. Дополнительные сведения см. в разделе "Настройка и расширение среды выполнения с помощью поведения".

Примеры, демонстрирующие перехват в клиенте WCF, см. в статье "Практическое руководство. Проверка или изменение сообщений на клиенте".

Использование класса ClientOperation

Класс ClientOperation — это место для изменений среды выполнения клиента и точка вставки для пользовательских расширений, ограниченных только одной операцией службы. (Чтобы изменить поведение среды выполнения клиента для всех сообщений в контракте, используйте ClientRuntime класс.)

Используйте свойство Operations, чтобы найти объект ClientOperation, представляющий определенную операцию службы. Следующие свойства позволяют вставлять пользовательские объекты в клиентскую систему WCF:

  • Используйте свойство Formatter для вставки пользовательской реализации IClientMessageFormatter для операции или изменения текущего форматтера.

  • ParameterInspectors Используйте свойство, чтобы вставить пользовательскую IParameterInspector реализацию или изменить текущую.

Следующие свойства позволяют изменять систему в взаимодействии с инспекторами форматирования и пользовательскими инспекторами параметров:

  • SerializeRequest Используйте свойство для управления сериализацией исходящего сообщения.

  • DeserializeReply Используйте свойство для управления десериализацией входящего сообщения.

  • Используйте свойство Action для управления действием WS-Addressing в сообщении запроса.

  • Используйте BeginMethod и EndMethod для указания, какие методы клиента WCF связаны с асинхронной операцией.

  • Используйте свойство FaultContractInfos, чтобы получить коллекцию, содержащую типы, которые могут встречаться в ошибках SOAP в качестве типа детали.

  • Используйте свойства IsInitiating и IsTerminating для управления тем, инициируется ли сеанс или отключается, соответственно, при вызове операции.

  • IsOneWay Используйте свойство, чтобы контролировать, является ли операция односторонняя.

  • Используйте свойство Parent, чтобы получить содержащий объект ClientRuntime.

  • Используйте свойство Name, чтобы получить имя операции.

  • SyncMethod Используйте свойство для управления тем, какой метод сопоставляется с операцией.

Чтобы расширить выполнение клиента WCF только для одной операции службы, проверьте свойства, доступные в ClientOperation классе, чтобы определить, приведет ли изменение свойства или реализация интерфейса и его добавление к свойству к созданию необходимой функциональности. Выбрав определенное расширение для сборки, вставьте расширение в соответствующее ClientOperation свойство, реализуя поведение клиента, которое предоставляет доступ к ClientOperation классу при вызове. При этом можно изменить свойство ClientRuntime, чтобы согласовать с вашими требованиями.

Как правило, реализация поведения операции (объект, реализующий IOperationBehavior интерфейс) достаточна, но вы также можете использовать поведения конечных точек и контракта для выполнения той же задачи, найдя OperationDescription для определенной операции и прикрепив поведение туда. Дополнительные сведения см. в разделе "Настройка и расширение среды выполнения с помощью поведения".

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

Примеры, демонстрирующие перехват в клиенте WCF, см. в статье "Практическое руководство. Проверка или изменение параметров".

См. также