Використання wcf сервісів - synchronizationmodule - oreodor documentation

WCF (Windows Communication Foundation) - це частина .NET Framework. призначена для розробки орієнтованих на сервіс додатків і організації обміну даними. Вона підтримує різні способи взаємодій. Як сервер можуть виступати як звичайні, так і веб-додатки. При цьому клієнтом може бути додаток, побудоване практично на будь-якій платформі.

Сервіс WCF - це програма, яка надає для зв'язку набір кінцевих точок (Endpoints). Їх можна представити як точки зв'язку в зовнішнім світом.

Кінцева точка визначається наступними характеристиками:

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

Сценарії використання

  • Наприклад, можна створити Web-сервіс, що підтримує сесії і транзакції, і розширити його можливістю перевірки необроблених повідомлень у міру їх надходження в систему.
  • Або створити ПО для обміну даними між існуючою корпоративною системою і веб-сервісами компанії.
  • Сервіси з використанням WCF дозволяє здійснити уніфікований доступ до функціоналу системи, як нашим додатків, так і стороннім споживачам.

алгоритм застосування

Написання (і настройка) WCF-сервісу - це завжди триступеневий процес.

Розглянемо ці кроки трохи докладніше. Створення WCF сервісів починається з опису контрактів даних.

Для визначення контракту даних необхідно зазначити атрибутами:

  1. [DataContract] - клас, який визначає контракт даних.
  2. [DataMember] - кожне поле цього класу, яке буде брати участь в обміні даними.

Не обов'язково, щоб всі поля повинні бути відзначені як [DataMember]. Це дає можливість виключати їх зі списку доступних клієнтові.

Контракти для стандартних типів, таких як int або string. вже визначені в WCF. Тому необхідно описувати контракти тільки для призначених для користувача типів.

Потім для отримання даних необхідний новий клас, який визначає джерело даних. Коли визначено контракт для даних і є джерело даних, можна перейти до опису взаємодії сервісу з клієнтами за допомогою сервісних контрактів.

Сервісні контракти визначають операції, які можуть бути доступні клієнту. Для його визначення так само, як і в випадку з даними, використовуються атрибути:

  1. [ServiceContract] - вказує на клас або інтерфейс, який визначає методи контракту.
  2. [OperationContract] - задає методи, які буде доступні клієнтам.

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

Нарешті, для повноцінної роботи визначаються параметри взаємодії сервісу із зовнішнім світом. У файл Web.config потрібно додати всередину розділу наступні рядки:

  • блок . який вказує, що далі міститься конфігурація WCF.
  • розділ , службовець для опису поводжень.
  • розділ c вказівками з налаштування середовища.
  • розділ . де вказуються служби . які доступні ззовні. Кожна служба містить Кінцеву точку ( ), Для якої вказуються поведінку, зв'язування і підтримуваний контракт. Зв'язування webHttpBinding означає, що використовується HTTP протокол для обміну повідомленнями (формат відповідей Json встановлений за замовчуванням).

В нашій реалізації настройки в Web.config не потрібні. При запуску програми сервіси налаштовуються автоматично.

Приклад з системи

Для прикладу розглянемо реалізацію сервісу, що надає інформацію про WCF сервісах, запущених на сервері.

Інтерфейс виглядає так:

Єдина відмінність від класичного WCF сервісу - це успадкування від IService. Даний інтерфейс порожній і служить тільки для знаходження і запуску сервісів при старті програми. Розглянемо реалізацію призначеного для користувача класу ServiceInformation:

[AllowAnonymousAccess] - атрибут вказує, що до сервісу можна звернеться анонімно, без надання токена.

Якщо сервіс не надає анонімний доступ, то на метод може бути повішений атрибут [ServiceSecurity]. Тоді даний метод буде виконуватися з правами користувача, для якого виданий токен.

Даний метод отримує інформацію про доступні сервіси на віддаленій системі.

Вказується інтерфейс сервісу, до якого хочемо отримати доступ, передається зовнішня система (вона містить Uri системи, і з неї можна отримати токен в разі необхідності), ім'я сервісу (щоб знати, яким шляхом на сервері його шукати) і прапор (використовувати анонімний доступ )

Використання try catch. закриває з'єднання, обов'язково. Об'єкт Disposable, але using залишає з'єднання відкритим.

Корисні посилання

Схожі статті