Загальні відомості про моделі каналів

Стек каналів Windows Communication Foundation (WCF) - це багаторівневий стек зв'язку з одним або декількома каналами, які обробляють повідомлення. У нижній частині стека знаходиться канал транспорту, який відповідає за адаптацію стека каналів до використовуваного транспорту (наприклад, TCP, HTTP, SMTP і іншим типам транспорту). Канали забезпечують модель низкоуровневого програмування для передачі і прийому повідомлень. Ця модель програмування грунтується на декількох інтерфейсах і ресурсах інших типів, в сукупності званих моделлю каналів WCF. В даному розділі розглядаються форми каналів, створення базового Прослуховувач каналів (в службі) і фабрики каналів (на клієнті).

Кінцеві точки WCF взаємодіють із зовнішнім світом, використовуючи стек зв'язку, званий стеком каналів. На наступному малюнку стек каналів порівнюється з іншими стеками зв'язку, наприклад TCP / IP.

Загальні відомості про моделі каналів

Спочатку відзначимо подібності. В обох випадках кожен рівень стека забезпечує деякий абстрактне уявлення середовища, що знаходиться під ним, і надає це абстрактне уявлення тільки рівню, розташованому безпосередньо над ним. Кожен рівень використовує абстрактне уявлення тільки рівня, розташованого безпосередньо під ним. Крім того, в обох випадках при взаємодії двох стеків кожен рівень взаємодіє з відповідним рівнем іншого стека, наприклад рівень IP взаємодіє з рівнем IP, рівень TCP - з рівнем TCP і т. Д.

Тепер відзначимо відмінності. Стек TCP був розроблений для забезпечення абстрактного уявлення фізичної мережі, а стек каналів - для забезпечення абстрактного уявлення не тільки способу доставки повідомлення, т. Е. Транспорту, а й інших особливостей, наприклад, які частини повідомлень, протоколу, використовуваного для взаємодії, включаючи транспорт, але не тільки його. Наприклад, елемент прив'язки надійного сеансу є частиною стека каналів, але не знаходиться нижче транспорту і не представляє сам транспорт. Ця абстракція досягається шляхом пред'явлення нижньому каналу в стеці вимоги адаптувати базовий транспортний протокол до архітектури стека каналів і подальшого розрахунку на те, що вищі канали в стеці повинні забезпечувати такі функції зв'язку, як надання гарантій надійності і безпеки.

Повідомлення проходять через стек зв'язку у вигляді об'єктів Message. Як показано на представленому вище малюнку, нижній канал називається каналом транспорту. Цей канал відповідає за передачу повідомлень іншим учасникам і прийом повідомлень від них, в тому числі несе відповідальність за перетворення об'єкта Message в формат, який використовується для зв'язку з іншими учасниками, і за зворотне перетворення. Над каналом транспорту може бути будь-яке число протокольних каналів, кожен з яких відповідає за забезпечення такої функції зв'язку, як надання гарантій надійної доставки. Протокольні канали оперують з повідомленнями, що проходять через них у вигляді об'єкта Message. Вони зазвичай або перетворять повідомлення, наприклад додаючи заголовки або шифруючи тіло повідомлення, або передають та приймають свої власні керуючі повідомлення протоколу, наприклад підтвердження прийому.

Кожен канал реалізує один або кілька інтерфейсів, називаються інтерфейсами форм каналів, або формами каналів. Ці форми каналів забезпечують такі орієнтовані на взаємодію методи, як передача і прийом або запит і відповідь, які реалізуються каналом і викликаються користувачем каналу. Основою форм каналів є інтерфейс IChannel. який надає метод GetProperty , передбачений в якості багаторівневого механізму доступу до довільних функцій, що надаються каналами в стеці. Нижче перераховані п'ять форм каналів, які розширюють інтерфейс IChannel.

Форми каналів створюються відповідно до деякими базовими шаблонами обміну повідомленнями, підтримуваними існуючими транспортними протоколами. Наприклад, односторонній обмін повідомленнями відповідає парі IInputChannel / IOutputChannel. взаємодія в режимі "запит-відповідь" відповідає парі IRequestChannel / IReplyChannel. і двостороння дуплексний зв'язок відповідає формі IDuplexChannel (яка розширює форми IInputChannel і IOutputChannel).

Стеки каналів зазвичай створюються за допомогою шаблону фабрики, де прив'язка створює стек каналів. На стороні передачі прив'язка використовується для створення фабрики ChannelFactory. яка, в свою чергу, створює стек каналів і повертає посилання на верхній канал в стеці. Потім додаток може використовувати цей канал для передачі повідомлень. Додаткові відомості див. У розділі Програмування клієнтів на рівні каналу.

На стороні прийому прив'язка використовується для створення Прослуховувач IChannelListener. який прослуховує вхідні повідомлення. IChannelListener надає повідомлення прослуховувати з додатком, створюючи стеки каналів і обробляючи посилання додатки на верхній канал. Потім додаток використовує цей канал для прийому вхідних повідомлень. Додаткові відомості див. У розділі Програмування служб на рівні каналу.

Об'єктна модель каналів - це базовий набір інтерфейсів, необхідних для реалізації каналів, Прослуховувач каналів і фабрик каналів. Існують також деякі базові класи, передбачені для сприяння в забезпеченні користувача реалізацій.

Прослуховувачі каналів відповідають за прослуховування вхідних повідомлень і їх доставку вищестоящому рівню по створеним ними каналах.

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

ICommunicationObject - це базовий інтерфейс, який визначає основний кінцевий автомат, який реалізують усі об'єкти, що обмінюються повідомленнями. CommunicationObject надає реалізацію цього базового інтерфейсу, від якого можна наслідувати інші класи каналів, що дозволяє уникнути повторної реалізації інтерфейсу. Однак це не обов'язково: призначений для користувача канал може реалізувати інтерфейс ICommunicationObject безпосередньо, а не наслідувати його від CommunicationObject. Жоден з класів, показаних на рис. 3, не вважається частиною моделі каналів; це допоміжні класи, доступні тим, хто займається реалізацією користувальницьких каналів і потребує коштів створення каналів.

Загальні відомості про моделі каналів

У наступних розділах описуються об'єктна модель каналів, а також різні галузі розробки, які допомагають створювати призначені для користувача канали.

Схожі статті