WCF – это технология, предназначенная для проектирования, построения, сопровождения и модификации распределенных приложений.
WCF – полностью построена на базе .NET Framework, написана с использованием языка C# и является частью .NET
SOA — Service Oriented Architecture
Сервис-ориентированная архитектура — это модульный подход к разработке программного обеспечения, основанный на использовании сервисов (служб) со стандартизированными интерфейсами.
Принципы SOA
- Архитектура, не привязана к определённой технологии.
- Независимость организации системы от используемой вычислительной платформы (платформ).
- Независимость организации системы от применяемых языков программирования.
- Использование сервисов, независимых от конкретных приложений, с единообразными интерфейсами доступа к ним.
- Организация сервисов как слабо-связанных компонентов для построения систем.
Сообщения
Сервис-ориентированные приложения – называют приложениями обмена сообщениями.
SOAP — Simple Object Access Protocol
Сервис (Служба)
Функциональный модуль, доступный для обращения к нему из других модулей.
Конечная точка (Endpoint) Конечная точка – представляет собой совокупность адреса, контракта и привязки.
Простой пример использовании WCF отправка сообщения и получения ответа:
У нас будет создано два проекта один клиентская часть, другая серверная.
В обоих проектах будет общий интерфейс, приведённый ниже:
Интерфейс IContract
1 2 3 4 5 6 |
[ServiceContract] interface IContract { [OperationContract] string Say(string input); } |
В клиентской части будет реализован лишь метод Main
Класс Client
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
class Client { static void Main(string[] args) { Console.Title = "CLIENT"; // Указание, где ожидать входящие сообщения. Uri address = new Uri("http://localhost:4000/IContract"); // Указание, как обмениваться сообщениями. BasicHttpBinding binding = new BasicHttpBinding(); // Создание Конечной Точки. EndpointAddress endpoint = new EndpointAddress(address); // Создание фабрики каналов. ChannelFactory<IContract> factory = new ChannelFactory<IContract>(binding, endpoint); // Использование factory для создания канала (прокси). IContract channel = factory.CreateChannel(); // Использование канала для отправки сообщения получателю и приема ответа. string response = channel.Say("Hello WCF!"); Console.WriteLine(response); // Задержка. Console.ReadKey(); } } |
Серверная часть
В ней находится 2 класса и представленный выше интерфейс.
Класс Service
1 2 3 4 5 6 7 8 9 10 11 |
class Service : IContract { // Реализация контракта - IContract. public string Say(string input) { Console.WriteLine("Сообщение получено, Тело содержит: {0}", input); // Ответ клиенту. return "OK!"; } } |
Класс Server
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
class Server { static void Main() { Console.Title = "SERVER"; // Указание адреса, где ожидать входящие сообщения. Uri address = new Uri("http://localhost:4000/IContract"); // ADDRESS. (A) // Указание привязки, как обмениваться сообщениями. BasicHttpBinding binding = new BasicHttpBinding(); // BINDING. (B) // Указание контракта. Type contract = typeof(IContract); // CONTRACT. (C) // Создание провайдера Хостинга с указанием Сервиса. ServiceHost host = new ServiceHost(typeof(Service)); // Добавление "Конечной Точки". host.AddServiceEndpoint(contract, binding, address); // Начало ожидания прихода сообщений. host.Open(); Console.WriteLine("Приложение готово к приему сообщений."); Console.ReadKey(); // Завершение ожидания прихода сообщений. host.Close(); } } |
Привязка
BasicHttpBinding binding = new BasicHttpBinding();
Клиент должен использовать точно такие же параметры привязки, что и служба.
URI
Uniform Resource Identifier – Уникальный Идентификатор Ресурса
URI = URL + URN
URL Uniform Resource Locator – Уникальный указатель Расположения Ресурса
URN Uniform Resource Name – Уникальный указатель Имени Ресурса
Возможности WCF
Основная функциональность WCF разделяется на 10 категорий:
- Независимая модификация. Возможность изменять отдельные части системы и добавлять новые, не затрагивая при этом другие её части.
- Асинхронный однонаправленный обмен сообщениями. Возможность написания приложений с применением вызовов функций типа «Запрос-Ответ».
- Платформенная консолидация. Объединение возможностей многих предыдущих технологий в единую программную модель.
- Безопасность. (Аутентификация, Авторизация, Конфиденциальность, Целостность, Безопасность на уровне транспорта, Безопасность на уровне сообщений) Основные концепции безопасности, с помощью которых обеспечивается безопасность сервисов, описаны спецификацией WS-Security.
- Надежность. В распределенных вычислениях, надежная доставка сообщений называется гарантированной. WCF содержит механизмы, обеспечивающие три вида гарантии надежной доставки сообщений: Не более одного раза, Хотя бы один раз, По порядку.
- Поддержка транзакций. Транзакцией называется набор операций. Сбой одной операции приводит к сбою всего набора.
- Сетевое взаимодействие (Interoperability) Способность системы менять программную или аппаратную платформу, не затрагивая других участников сценария распределенных вычислений.
- Производительность.
- Расширяемость. WCF — предоставляет возможности для расширения своей архитектуры. WCF позволяет создавать свои собственные: Транспорт, Каналы, Привязки, Кодировки, Архитектурные парадигмы.
- Возможности конфигурирования. WCF — предоставляет возможности конфигурирования посредством конфигурационных файлов на базе XML. Возможность конфигурирования позволяет сотрудникам, не
- являющимся разработчиками, сопровождать приложение и изменять порядок его действий без привлечения команды разработчиков.