Обзор модели канала

Стек каналов Windows Communication Foundation (WCF) — это многоуровневый стек связи с одним или несколькими каналами, обрабатывающими сообщения. В нижней части стека находится транспортный канал, отвечающий за адаптацию стека каналов к базовому транспорту (например, TCP, HTTP, SMTP и других типов транспорта). Каналы предоставляют низкоуровневую модель программирования для отправки и получения сообщений. Эта модель программирования использует несколько интерфейсов и других типов, известных как модель канала WCF. В этом разделе рассматриваются формы каналов, процесс создания основного прослушивателя каналов на стороне службы и фабрики каналов на стороне клиента.

Стек каналов

Конечные точки WCF взаимодействуют с миром с помощью стека связи, называемого стеком каналов. На следующей схеме сравнивается стек каналов с другими стеками связи, например TCP/IP.

Модель канала

Во-первых, сходство: в обоих случаях каждый слой стека обеспечивает некоторую абстракцию мира ниже этого слоя и предоставляет эту абстракцию только слою непосредственно над ним. Каждый слой использует абстракцию только слоя под ним. Кроме того, в обоих случаях при обмене данными между двумя стеками каждый слой взаимодействует с соответствующим слоем в другом стеке, например, слой IP взаимодействует со слоем IP и уровнем TCP с уровнем TCP и т. д.

Теперь различия: хотя стек TCP был разработан для обеспечения абстракции физической сети, стек каналов предназначен для обеспечения абстракции не только того, как доставлено сообщение, то есть транспорт, но и другие функции, такие как то, что находится в сообщении или какой протокол используется для обмена данными, включая транспорт, но гораздо больше, чем это. Например, элемент привязки надежных сеансов является частью стека каналов, но не относится к транспортному уровню или к самому транспорту. Эта абстракция достигается путем требования нижнего канала в стеке адаптировать базовый транспортный протокол к архитектуре стека каналов, а затем полагаться на каналы дальше в стеке, чтобы обеспечить такие функции связи, как гарантии надежности и безопасность.

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

Фигуры канала

Каждый канал реализует один или несколько интерфейсов, известных как интерфейсы формы канала или формы канала. Структуры канала предоставляют методы для обмена сообщениями, такие как отправка и получение или запрос и ответ, которые реализуются каналом и вызываются пользователем канала. В основе форм канала находится интерфейс IChannel, который предоставляет метод GetProperty<T>, предназначенный как многослойный механизм для доступа к произвольным функциям, предоставляемым каналами в стеке. Пять форм каналов, которые расширяют IChannel :

Кроме того, каждая из этих фигур имеет эквивалент, который расширяется System.ServiceModel.Channels.ISessionChannel<TSession> для поддержки сеансов. К ним относятся:

Фигуры канала шаблонируются после некоторых основных шаблонов обмена сообщениями, поддерживаемых существующими протоколами транспорта. Например, односторонний обмен сообщениями соответствует IInputChannel/IOutputChannel паре, запрос-ответ соответствует IRequestChannel/IReplyChannel парам, а двусторонний дуплексный обмен соответствует IDuplexChannel (который расширяет и IInputChannel и IOutputChannel).

Программирование с помощью стека каналов

Стеки каналов обычно создаются с помощью шаблона фабрики, в котором привязка создает стек каналов. На стороне отправки привязка применяется для построения ChannelFactory, которая, в свою очередь, создает стек каналов и возвращает ссылку на верхний канал в стеке. Затем приложение может использовать этот канал для отправки сообщений. Дополнительные сведения см. в разделе "Программирование Channel-Level клиента".

На стороне получения привязка используется для построения IChannelListener, который прослушивает входящие сообщения. IChannelListener предоставляет сообщения приложению, которое их прослушивает, создавая стек каналов и передавая ссылку на верхний канал. Затем приложение использует этот канал для получения входящих сообщений. Дополнительные сведения см. в разделе "Channel-Level программирование службы".

Объектная модель канала

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

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

Фабрики каналов отвечают за создание каналов, которые используются для отправки сообщений и закрытия всех каналов, созданных при закрытии фабрики каналов.

ICommunicationObject — это основной интерфейс, определяющий базовый компьютер состояния, реализующий все объекты коммуникации. CommunicationObject предоставляет реализацию этого основного интерфейса, от которого другие классы каналов могут наследовать, вместо повторной реализации интерфейса. Однако это не обязательно: пользовательский канал может реализовать ICommunicationObject напрямую и не наследовать от CommunicationObject. Ни один из классов на рис. 3 не считается частью модели канала; они являются вспомогательными средствами, доступными для пользовательских разработчиков каналов, которые хотят создавать каналы.

Модель канала

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

Тема Описание
Служба: слушатели каналов и каналы Описывает прослушиватели каналов, которые прослушивают входящие каналы в приложении-службе.
Клиент: Фабрики каналов и каналы Описывает фабрики каналов, которые создают каналы для взаимодействия с сервисным приложением.
Общие сведения об изменениях состояния Описывает, как интерфейс System.ServiceModel.ICommunicationObject моделирует изменения состояния в каналах.
Выбор шаблона Обмена сообщениями Описывает шесть основных шаблонов обмена сообщениями, которые могут поддерживать каналы.
Обработка исключений и сбоев Описывает процесс обработки ошибок и исключений в пользовательских каналах.
Поддержка конфигурации и метаданных Описывает, как поддерживать использование пользовательских каналов из модели приложения и как экспортировать и импортировать метаданные с помощью привязок и элементов привязки.