X Код для використання на сайті:
Ширина px

Скопіюйте цей код і вставте його на свій сайт

X Для завантаження презентації, скористайтесь соціальною кнопкою для рекомендації сервісу SvitPPT Завантажити собі цю презентацію

Презентація на тему:
Основи технології Microsoft Windows Communication Foundation

Завантажити презентацію

Основи технології Microsoft Windows Communication Foundation

Завантажити презентацію

Презентація по слайдам:

Слайд 1

Основи технології Microsoft Windows Communication Foundation 2010 (Курс “Інформаційні технології”) WCF - 2010

Слайд 2

WCF - 2010

Слайд 3

WCF як технологія, пов'язана зі службами: створенням, розгортанням, використанням служб, їх безпекою, транзакційністю, надійністю доставки повідомлень тощо. Розвиток WCF відбувається на засадах підтримки стандартів служб (зокрема, “розширених” служб – служб узгоджених зі стандартом ws-*) та забезпеченням інтероперабельності. Windows Communication Foundation (WCF) Служби складають основу сучасної глобальної розподіленої мережі, а WCF вважають найпростішим засобом їх надання та використання на платформі Microsoft. Відповідна простота досягається за рахунок інкапсуляції технології (проте не приховуванням!) у різноманітних інструментальних засобах, зокрема у MS Visual Studio. WCF - 2010

Слайд 4

WCF-сервіс публікує колекцію кінцевих точок (Endpoints). Кожну кінцеву точку можна розглядати як портал для спілкування із клієнтськими програмами. WCF-клієнт може звертатись до однієї чи декількох кінцевих точок і також може публікувати власні кінцеві точки для прийому повідомлень від WCF-сервісів. Кінцева точка визначається наданням “алфавітної трійки ABC”: Основи архітектури WCF Address (адреса); Binding (прив'язка); Contract (контракт). WCF - 2010

Слайд 5

Адреса кінцевої точки (Address) – це звичайна мережна адреса, де розташований відповідний портал. Прив'язка (Binding) кінцевої точки визначає, як реалізується обмін повідомленнями, зокрема, який обрано транспортний протокол (TCP, HTTP тощо), яке використовується кодування (text, binary тощо), чи використовуються засоби безпеки та ін. Контракт (Contract) кінцевої точки визначає, що складає предмет спілкування, тобто які, наприклад, можливі запити до WCF-сервісу і які можливі відповіді. Можуть використовуватись різні базові шаблони обміну повідомленнями (basic Message Exchange Patterns), наприклад, запит/відповідь, симплекс, дуплекс. (“Функціональний інтерфейс”) Кінцеві точки WCF (1/2) Кінцева точка визначається наданням адреси (Address), прив'язки (Binding) та контракту (Contract). WCF - 2010

Слайд 6

Можна задавати декілька кінцевих точок навіть з одним контрактом, надаючи (через прив’язки) різні можливості щодо його використання. Наприклад, щоб забезпечити “максимально відкритий доступ” клієнтів до сервісу, можна скористатись (стандартною) прив’язкою binding=“basicHttpBinding” (ця прив’язка відповідає відомій специфікації: Web Services Interop Basic Profile 1.1 – WS-I BP1.1), а щоб досягти максимальної продуктивності міжмашинної взаємодії у корпоративній мережі на платформі .Net доцільно скористатись (стандартною) прив’язкою binding=“netTcpBinding” (ця прив’язка базується на використанні, по-перше, транспортного протоколу tcp та, по-друге, двійкового кодування). Кінцеві точки WCF (2/2) Кінцева точка визначається наданням адреси (Address), прив'язки (Binding) та контракту (Contract). WCF - 2010

Слайд 7

Прив’язки Прив'язка (Binding) описує комунікаційні деталі, що пов'язані з використанням служби. Поняття прив'язки можна розглядати як деякий аналог поняття стеку каналів, тобто деякої конфігурації (послідовної комбінації) каналів. (Прив'язка складається відповідно з набору елементів прив'язки.) Важливо усвідомлювати, що повідомлення служб обробляються послідовно кожним із каналів стеку. Використовуються канали двох видів: транспортні (єдиний транспортний канал розташовується “внизу” стека: при відправленні повідомлення він використовується останнім, а при прийнятті – першим) та протокольні (зокрема, вони можуть забезпечувати шифрування повідомлень, стискання, кодування тощо). WCF - 2010

Слайд 8

Прив’язки. Варіанти транспортних каналів Можливі варіанти транспортних каналів (протоколів): HTTP; TCP; MSMQ (канал черг повідомлень згідно до технології Microsoft Message Queue; специфіка: “незв'язаний” клієнт, обмін даними односторонній); NamedPipes (іменовані канали; такий варіант забезпечує високу продуктивність для локальних комунікацій, тобто між процесами чи доменами на одній машині); Ілюстрація до пірінгової моделі PerChannel (пірінговий канал, у пірінговій архітектурі peer-to-peer – P2P кожен вузол “має рівні права”: виступає по відношенню до інших вузлів як у ролі клієнта, так і у ролі сервера). (Порівняйте з архітектурою клієнт-сервер, багаторівневою архітектурою.) WCF - 2010

Слайд 9

Прив'язки на замовлення. Приклади (1/2) CustomBinding customBinding = new CustomBinding( new OneWayBindingElement(), //канальна форма new TextMessageEncodingBindingElement(), new HttpTransportBindingElement() ); CustomBinding custBinding = new CustomBinding(); custBinding.Elements.Add( new BinaryMessageEncodingBindingElement()); custBinding.Elements.Add( new UdpTransportBindingElement()); Приклад 1. Приклад 2. WCF - 2010

Слайд 10

. . . Приклад 2.a. Створення прив'язки у конфігураційному файлі. CustomBinding custBinding = new CustomBinding(); custBinding.Elements.Add( new BinaryMessageEncodingBindingElement()); custBinding.Elements.Add( new UdpTransportBindingElement()); Приклад 2. Прив'язки на замовлення. Приклади (2/2) WCF - 2010

Слайд 11

Стандартні прив’язки Можна використовувати стандартні (“готові)” прив'язки. Наведемо приклади найбільш уживаних стандартних прив'язок: basicHttpBinding; wsHttpBinding; ws2007HttpBinding; netTcpBinding; netNamedPipeBinding (забезпечує високу продуктивність для локальних комунікацій, тобто між процесами чи доменами на одній машині). WCF - 2010

Слайд 12

Прив’язка basicHttpBinding: є сумісною зі службами ASMX та загалом зі службами WS-I BP1.1, забезпечуючи інтероперабельність гетерогенних систем; WS-I BP1.1 – cпецифікація Web Services Interop Basic Profile 1.1 (проте, загалом, не стандарт!) 2004 року, яка є результатом співпраці відомих фірм: Microsoft, IBM, BEA, ORACLE etc та спирається на стандарти SOAP 1.1, WSDL 1.1, Message Security 1.0 ); зокрема, містить вище згадуваний елемент прив'язки HttpTransportBindingElement; за замовчуванням не є безпечною (найпростіший варіант зробити прив'язку безпечною – просто задіяти протокол https: у цьому випадку для даних відбувається шифрування згідно з протоколом SSL/TLS; для протоколу http за замовчуванням використовується порт 80, а для протоколу https – порт 443) з форматом адресації (відповідно для протоколів http та https ): http://[:]/ https://[:]/ використовує загалом біля двох десятків властивостей, які можна встановлювати конфігуруванням. WCF - 2010

Слайд 13

Прив’язка basicHttpBinding. Приклад конфігурування прив’язки

Слайд 14

Прив’язка wsHttpBinding: є сумісною із так званими “розширеними” (або “просуненими”) службами, що відповідають стандартам веб-служб WS-* (чим також забезпечується інтероперабельність); прив'язкою підтримується стандарт SOAP 1.2 та підтримуються багато інших стандартів, безпосередньо пов'язаних зі специфікацією розширених служб WS-*. Зокрема, підтримуються такі канали (протоколи) інфраструктурного рівня, що забезпечують транзакційність повідомлень (стандарт WS-Atomic Transactions), надійність доставки повідомлень (стандарт WS-ReliableMessaging), підтримку безпеки повідомлень (із безпекою пов'язано півдесятка стандартів WS-*). Загальні зауваження: 1. Окрім wsHttpBinding є й інші стандартні прив'язки, що відповідають стандартам WS-* , наприклад, wsDualHttpBinding. 2. У WCF імена усіх прив'язок, призначених для реалізації інтероперабельності на основі веб-служб, мають префікс ws. WCF - 2010

Слайд 15

Прив’язка ws2007HttpBinding: з'явилася у версії .Net Framework 3.5; є аналогічною прив'язці wsHttpBinding, проте підтримує стандарти WS-* на час виходу версії .Net Framework 3.5 – 2007 рік. WCF - 2010

Слайд 16

Прив’язка netTcpBinding: призначена для міжмашинної взаємодії .Net додатків (тільки на платформі .Net!). використовує елемент прив'язки TcpTransportBindingElement; формат адресації: net.tcp://[:]/ (порт за замовчуванням – 808); як і для інших прив'язок, визначені властивості (загалом їх 17), які можна встановлювати конфігуруванням. Наприклад, maxConnection визначає максимальну кількість одночасних підключень із кінцевою точкою (за замовчуванням – 10), closeTimeOut – максимальне очікування закриття з'єднання (за замовчуванням – 00:01:00). WCF - 2010

Слайд 17

MS Visual Studio 2008. WCF-проект, що генерується майстром (1/3) Створення та безпосередній запуск проекту (Ctrl+F5). Перегляд у браузері. Див. наступн. слайд WCF - 2010

Слайд 18

MS Visual Studio 2008. WCF-проект, що генерується майстром (2/3) WCF - 2010

Слайд 19

Проксі-клас MS Visual Studio 2008. WCF-проект, що генерується майстром (3/3) WCF - 2010

Слайд 20

MS Visual Studio 2010. WCF-проект, що генерується майстром (1/6) Генерується такий саме проект, як і у Visual Studio 2008. Так само можливий безпосередній запуск проекту (Ctrl+F5) та перегляд у браузері. WCF - 2010

Слайд 21

Ctrl+F5 — генерується клієнтський тест-проект “WCF Test Client” MS Visual Studio 2010. WCF-проект (C#), що генерується майстром (2/6) Див. наступн. слайд WCF MS Visual Studio 2010: автоматична генерація тестів WCF - 2010

Слайд 22

MS Visual Studio 2010. WCF-проект (C#), що генерується майстром (3/6) Клієнтський тест-проект “WCF Test Client” WCF - 2010

Слайд 23

MS Visual Studio 2010. WCF-проект (C#), що генерується майстром (4/6) Тестування GetDataUsingDataContract WCF - 2010

Слайд 24

MS Visual Studio 2010. WCF-проект (C#), що генерується майстром (5/6) Тестування GetDataUsingDataContract (XML-повідомлення) WCF - 2010

Слайд 25

MS Visual Studio 2010. WCF-проект (C#), що генерується майстром (6/6) Клієнтський конфігураційний файл WCF - 2010

Слайд 26

WCF. Демонстраційний приклад WCF - 2010

Слайд 27

У звичайний консольний проект додамо WCF -службу, скориставшись майстром: Серверний проект CalcWCF . (1/7) (Microsoft Visual Studio 2008) 3. Натиснути 2. Увести 1. Обрати WCF - 2010

Слайд 28

Серверний проект CalcWCF . (2/7) ICalcService.cs using System; using System.Collections.Generic; using System.Linq; using System.Runtime.Serialization; using System.ServiceModel; using System.Text; namespace CalcWCF { // NOTE: If you change the interface name "ICalcService" here, // you must also update the reference to "ICalcService" in // App.config. [ServiceContract] public interface ICalcService { [OperationContract] void DoWork(); } } [OperationContract] double Add(double a1, double a2); Модуль ICalcService.cs з інтерфейсом (генерується майстром) Пропонується заміна! WCF - 2010

Слайд 29

Серверний проект CalcWCF . (3/7) CalcService.cs using System; using System.Collections.Generic; using System.Linq; using System.Runtime.Serialization; using System.ServiceModel; using System.Text; namespace CalcWCF { // NOTE: If you change the class name "CalcService" here, you // must also update the reference to "CalcService" in App.config public class CalcService : ICalcService { public void DoWork() { } } } public double Add(double a1, double a2) { Console.WriteLine(string.Format("Adding {0} and {1}", a1, a2)); return a1 + a2; } Модуль CalcService.cs з класом реалізації (генерується майстром) Пропонується заміна! WCF - 2010

Слайд 30

Серверний проект CalcWCF . (4/7) CalcService.cs (версія для дослідження) public class CalcService : ICalcService { private Guid m_guid; public CalcService() { m_guid = Guid.NewGuid(); Console.WriteLine("CalcService created. New GUID: {0}", m_guid.ToString()); } public double Add(double a1, double a2) { Console.WriteLine(string.Format( "Adding {0} and {1}; GUID is {2}", a1, a2, m_guid.ToString())); return a1 + a2; } } З використанням GUID ! WCF - 2010

Слайд 31

Серверний проект CalcWCF . (5/7) Program.cs using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.ServiceModel; namespace CalcWCF { class Program { static void Main(string[] args) { ServiceHost shost = new ServiceHost(typeof(CalcService)); shost.Open(); Console.WriteLine("Ready!"); Console.ReadLine(); shost.Close(); Console.WriteLine("Closed"); } } } Підтримка такого хостінгу пов'язується з проектом “Indigo” CalcWCF – self-hosted проект WCF - 2010

Слайд 32

Серверний проект CalcWCF . (6/7) App.config (фрагмент)

Слайд 33

Серверний проект CalcWCF. (7/7) Маленька перевірка у браузері

Слайд 34

Важливий висновок: можливість отримання метаданих WCF-служб у форматі WSDL (1/2) Натиснути Пригадаємо WS і порівняємо WCF - 2010

Слайд 35

Важливий висновок: можливість отримання метаданих WCF-служб у форматі WSDL (2/2) CalcService – і’мя класу (реалізації)WCF-служби Клас проксі (у прикладі – CalcServiceCLient) Пригадаємо WS і порівняємо WCF - 2010

Слайд 36

По-перше, App.config містить описи двох (!) кінцевих точок WCF-служби За рахунок чого забезпечується доступ до метаданих служби та отримання її WSDL-опису у браузері? (1/3) "mex” – від MetadataExchange Файл App.config (фрагмент) WCF - 2010

Слайд 37

По-друге, в App.config міститься опис спеціальної поведінки (behavior) WCF-служби Забезпечується можливість доступу до метаданих безпосередньо із браузера, використовуючи операцію GET протоколу HTTP За замовчуванням – ”false" Файл App.config (фрагмент) За рахунок чого забезпечується доступ до метаданих служби та отримання її WSDL-опису у браузері? (2/3) WCF - 2010

Слайд 38

Слайд 39

Доступ до метаданих служби. Альтернативний варіант Увага! Це не посилання! Файл App.config (фрагмент) Цей варіант є варіантом за замовчуванням WCF - 2010

Слайд 40

Пригадаємо: Зауваження. Якщо служба має декілька кінцевих точок, то у кожної з них має бути унікальна адреса. Служби з кількома кінцевими точками. Зауваження Можна задавати декілька кінцевих точок навіть з одним контрактом, надаючи (через прив’язки) різні можливості щодо його використання. Файл App.config (фрагмент) WCF - 2010

Слайд 41

Metadata Доступ до метаданих служби WCF - 2010

Слайд 42

Клієнтський WinForms-проект CalcClient. (1/5) Отримання проксі (Microsoft Visual Studio 2008)

Слайд 43

Клієнтський WinForms-проект CalcClient. (2/5) “Add Service Reference” (“Добавить ссылку на службу”) CalcService – і’мя класу (реалізації)WCF-служби Клас проксі (у прикладі – CalcServiceCLient) WCF - 2010

Слайд 44

Клієнтський WinForms-проект CalcClient. (2/5) “Add Service Reference” (“Добавить ссылку на службу”) За лаштунками – використання утиліти svcutil.exe svcutil.exe http://localhost:8731/Design_Time_Addresses/ CalcWCF/CalcService/mex/ -app.config -genProxy.cs WCF - 2010

Слайд 45

Клієнтський WinForms-проект CalcClient. (3/5) Модуль Reference.cs із проксі-класом (фрагмент) //------------------------------------------------------------------------------ // // Этот код создан программой. // Исполняемая версия:2.0.50727.3053 // // Изменения в этом файле могут привести к неправильной работе и будут потеряны в случае // повторной генерации кода. // //------------------------------------------------------------------------------ namespace CalcClient.CalcRef { [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "3.0.0.0")] [System.ServiceModel.ServiceContractAttribute(ConfigurationName="CalcRef.ICalcService")] public interface ICalcService { [System.ServiceModel.OperationContractAttribute(Action= "http://tempuri.org/ICalcService/Add", ReplyAction="http://tempuri.org/ICalcService/AddResponse")] double Add(double a1, double a2); } [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "3.0.0.0")] public interface ICalcServiceChannel : CalcClient.CalcRef.ICalcService, System.ServiceModel.IClientChannel { } [System.Diagnostics.DebuggerStepThroughAttribute()] [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "3.0.0.0")] public partial class CalcServiceClient : System.ServiceModel.ClientBase, CalcClient.CalcRef.ICalcService { public CalcServiceClient() { } . . . WCF - 2010

Слайд 46

Клієнтський WinForms-проект CalcClient. (4/5) Form1.cs (фрагмент) public partial class Form1 : Form { CalcServiceClient proxy; public Form1() { InitializeComponent(); proxy = new CalcServiceClient(); } private void button1_Click(object sender, EventArgs e) { double a1 = double.Parse(textBox1.Text); double a2 = double.Parse(textBox2.Text); //CalcServiceClient proxy = new CalcServiceClient(); double result = proxy.Add(a1, a2); label1.Text = "" + result; } } Клас проксі Файл Form1.cs (фрагмент) WCF - 2010

Слайд 47

Клієнтський WinForms-проект CalcClient. (5/5) app.config (фрагмент) Файл app.config (фрагмент) WCF - 2010

Слайд 48

CalcService — проект із режимом PerSession ! Отже, PerSession — режим за замовчуванням. - Як впливати? - Behavior! WCF - 2010

Слайд 49

CalcService — проект із режимом PerSession ! Отже, PerSession — режим за замовчуванням. - Як впливати? - Behavior! WCF - 2010

Слайд 50

Behavior. Пригадаємо… За рахунок чого забезпечується доступ до метаданих служби та отримання її WSDL-опису у браузері? (3/3)

Слайд 51

Behavior-класи (класи поведінки ) Впливають на роботу WCF на етапі виконання, зокрема, при ініціалізації інфраструктури WCF на боці сервера або клієнта, а також у процесі передачі повідомлень (перед відправленням, та після прийняття). Їх можна розглядати як механізм розширення WCF . Наприклад, саме поведінкою визначається, чи потрібно викликаний метод включати у транзакцію, чи потрібно створювати новий екземпляр класу служби. Залежно від рівня впливу на роботу WCF іноді поділяються на типи, основними з яких є наступні три: поведінки рівня служби (впливають на всі кінцеві точки), які, зокрема, управляють створенням екземплярів, транзакціями, авторизацією тощо; поведінки рівня кінцевої точки (впливають на інспектування та обробку повідомлень служби (як вхідних, так і вихідних); поведінки рівня операції (впливають на інспектування та обробку параметрів, зокрема на їх серіалізацію). WCF - 2010

Слайд 52

Metadata Behavior (Поведінка) Behaviors Behaviors WCF - 2010

Слайд 53

Приклади класів поведінки. Клас serviceMetadata (ServiceMetadataBehavior)

Слайд 54

Приклади класів поведінки: класи InstanceContextMode та ConcurrencyMode InstanceContextMode є поведінкою рівня служби, що використовується для управління створенням екземплярів та може приймати одне з трьох значень: InstanceContextMode.PerCall; InstanceContextMode.PerSession; InstanceContextMode.Single. ConcurrencyMode є поведінкою рівня служби, що використовується для управління паралелізмом всередині екземпляра служби та може приймати одне з трьох значень: ConcurrencyMode. Single – до екземпляра може звертатись лише один потік (режим за замовчуванням); ConcurrencyMode.Reentrant – до екземпляра може звертатись лише один потік, але він може покидати службу, а потім до неї повертатись; ConcurrencyMode.Multiple – до екземпляра можуть звертатись кілька потоків (клас має розроблятись з урахуванням безпеки стосовно потоків). WCF - 2010

Слайд 55

Клас InstanceContextMode та режими інстанціації (instance) або об’єктні режими PerCall — режим за замовчуванням; PerSession; Single. Варіанти .Net Remoting активації: клієнтська; серверна з режимами: Singleton; SingleCall. [ServiceBehavior(InstanceContextMode = InstanceContextMode.Single)] public class CalcService : ICalcService CalcService.cs (фрагмент) Пригадаємо .Net Remoting WCF - 2010

Слайд 56

Приклад використання режиму Single CalcService.cs (фрагмент) [ServiceBehavior(InstanceContextMode = InstanceContextMode.Single)] public class CalcService : ICalcService Доданий атрибут. (Це єдина відмінність порівняно з базовою версією серверного проекту!) WCF - 2010

Слайд 57

Режим PerSession Режим PerSession має ту особливість, що підтримується не всіма зв’язуваннями (binding), зокрема не підтримується такими стандартними зв’язуваннями, як BasicHttpBinding, NetPeerTcpBinding. Відповідно у контракті рекомендується інформувати про необхідність підтримки сессій. [ServiceContract] public interface ICalcService ICalcService.cs (фрагмент) [ServiceContract(SessionMode = SessionMode.Required)] Рекомендована заміна WCF - 2010

Слайд 58

Приклад використання режиму PerSession CalcService.cs (фрагмент) [ServiceBehavior(InstanceContextMode = InstanceContextMode.PerSession)] public class CalcService : ICalcService Доданий атрибут. WCF - 2010

Слайд 59

Приклад Клієнтський проект звертається до двох схожих за функціональністю сервісів (з інтерфейсними методами Add та Sub відповідно), але один з них використовує асинхронні виклики (а саме для Sub). WCF. Підтримка асинхронних викликів (1/4) WCF - 2010

Слайд 60

WCF. Підтримка асинхронних функцій (2/4) Серверний проект CalcWCF_Async. CalcAsyncService.cs (фрагмент) public class CalcAsyncService : ICalcAsyncService { public double Sub(double a1, double a2) { Console.WriteLine(DateTime.Now); Console.WriteLine(string.Format("Waiting Sub {0} and {1}", a1, a2)); System.Threading.Thread.Sleep(10000); Console.WriteLine("Sub is ready"); Console.WriteLine(DateTime.Now); return a1 - a2; } } WCF - 2010

Слайд 61

WCF. Підтримка асинхронних функцій (3/4) Клієнтський проект: отримання проксі Для SvcUtil – прапорець /async WCF - 2010

Слайд 62

WCF. Підтримка асинхронних функцій (4/4) Клієнтський проект Традиційний підхід .Net з використанням трійки: типу IAsyncResult та функцій Begin*, End*. (Об’єкти-делегати) private void button2_Click(object sender, EventArgs e) { double a1 = double.Parse(textBox3.Text); double a2 = double.Parse(textBox4.Text); IAsyncResult arSub = proxy2.BeginSub( a1, a2, SubCallBack , proxy2 ); } void SubCallBack(IAsyncResult ar) { double result = ((CalcAsyncServiceClient)ar.AsyncState).EndSub(ar); label2.Text = "" + result; MessageBox.Show("Sub is ready"); } Form1.cs (фрагмент). (Методи класу форми.) Метод SubCallBack викликається після завершення асинхронної операції (делегат) Form1.cs (фрагмент — методи класу форми) Делегат proxy2 зберігається “станом” WCF - 2010

Слайд 63

DataContract Контракти про дані (DataContract): задають структури даних (як даних CLR-типів), що використовуються при взаємодії служби із клієнтськими програмами; визначають відображення даних CLR-типів у дані-повідомлення SOAP–протоколу, структура яких визначається з використанням нотації XML SchemaDefinition (XSD); зокрема, уточнюється, яким чином буде здійснюватись серіалізація даних CLR-типів та спряжена десеріалізація: атрибутом [DataMember] відмічаються ті члени класу, що підлягають серіалізації. Визначення імен і порядку слідування компонент WCF - 2010

Слайд 64

DataContract. Приклад (1/8). Використання прив’язки basicHttpBinding

Слайд 65

DataContract. Приклад (2/8). Інтерфейс служби та DataContract–клас ComplexNumber [ServiceContract] public interface IComplexAdd { [OperationContract] ComplexNumber Add(ComplexNumber a, ComplexNumber b); } [DataContract] public class ComplexNumber { [DataMember(Name = "RealPart", Order = 0, IsRequired = true)] public double Real; [DataMember(Name = "ImaginaryPart", Order = 1, IsRequired = true)] public double Imaginary; public ComplexNumber(double re, double im) { this.Real = re; this.Imaginary = im; } } IComplexAdd.cs (фрагмент) WCF - 2010

Слайд 66

DataContract. Приклад (3/8). Реалізація інтерфейсу служби namespace DataContractPr { public class ComplexAdd : IComplexAdd { public ComplexNumber Add(ComplexNumber a, ComplexNumber b) { return new ComplexNumber(a.Real + b.Real, a.Imaginary + b.Imaginary); } } } ComplexAdd.cs (фрагмент) WCF - 2010

Слайд 67

DataContract. Приклад (4/8). WSDL-файл служби http://localhost:8731/Design_Time_Addresses/DataContractPr/ComplexAdd/?wsdl WCF - 2010

Слайд 68

DataContract. Приклад (5/8). XML SchemaDefinition (xsd2 – імпортована частина WSDL ) http://localhost:8731/Design_Time_Addresses/DataContractPr/ ComplexAdd/?xsd=xsd2 WCF - 2010

Слайд 69

DataContract. Приклад (6/8). Порівняння DataContract та XML Schema [DataContract] public class ComplexNumber { [DataMember(Name = "RealPart", Order = 0, IsRequired = true)] public double Real; [DataMember(Name = "ImaginaryPart", Order = 1, IsRequired = true)] public double Imaginary; . . . } WCF - 2010

Слайд 70

DataContract. Приклад (7/8). xsd0 – імпортована частина WSDL http://localhost:8731/Design_Time_Addresses/DataContractPr/ ComplexAdd/?xsd=xsd0 WCF - 2010

Слайд 71

DataContract. Приклад (8/8). xsd1 – імпортована частина WSDL http://localhost:8731/Design_Time_Addresses/DataContractPr/ ComplexAdd/?xsd=xsd1 WCF - 2010

Слайд 72

MessageContract Контракти про повідомлення (MessageContract) задають відображення даних CLR-типів у дані-повідомлення – повідомлення протоколу SOAP. Важливо, що контракти про повідомлення надають можливість безпосередньо контролювати склад заголовку (header) і тіла (body) SOAP–повідомлення, а також спростити маніпулювання заголовком, тілом та їх складовими частинами. WCF - 2010

Слайд 73

MessageContract. Приклад (1/3). Інтерфейс служби та класи-повідомлення [ServiceContract] public interface IMessageService { [OperationContract] OutputMessage Calculate(InputMessage request); } [MessageContract] public class InputMessage { [MessageHeader] public string date_time {get; set;} [MessageBodyMember] public double a {get; set;} [MessageBodyMember] public double b {get; set;} } [MessageContract] public class OutputMessage { [MessageHeader] public string date_time {get; set;} [MessageBodyMember] public double result {get; set;} } IMessageService.cs (фрагмент) WCF - 2010

Слайд 74

MessageContract. Приклад (2/3) Реалізація інтерфейсу служби public class MessageService : IMessageService { public OutputMessage Calculate(InputMessage request) { OutputMessage outMessage = new OutputMessage(); outMessage.result = request.a + request.b; outMessage.date_time = DateTime.Now.ToString(); return outMessage; } } MessageService.cs (фрагмент) WCF - 2010

Слайд 75

MessageContract. Приклад (3/3) Фрагмент клієнтського проекту private void button1_Click(object sender, EventArgs e) { double a1 = double.Parse(textBox1.Text); double a2 = double.Parse(textBox2.Text); MessageServiceClient proxy = new MessageServiceClient(); InputMessage inMessage = new InputMessage(); inMessage.a = a1; inMessage.b = a2; inMessage.date_time = DateTime.Now.ToString(); OutputMessage outMessage = proxy.Calculate(inMessage); label1.Text = "" + outMessage.result + " (" + inMessage.date_time + "---"+outMessage.date_time+ ")"; } MessagePrClient.cs (фрагмент) WCF - 2010

Слайд 76

До використання MessageContract у клієнтському проекті WCF - 2010

Слайд 77

Додаток WCF - 2010

Слайд 78

Додавання WCF -служби у консольний проект: Microsoft Visual Studio 2010. Склад серверного проекту, що генерується майстром 3. Натиснути 2. Увести 1. Обрати Склад проекту WCF - 2010

Слайд 79

Проекти 2008/CalcWCF WCF - 2010

Завантажити презентацію

Презентації по предмету Інформатика