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

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

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

Презентація на тему:
Windows Communication Foundation

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

Windows Communication Foundation

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

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

Слайд 1

Windows Communication Foundation (від Microsoft) 2010-2011 WCF

Слайд 2

Windows Communication Foundation (WCF) WCF

Слайд 3

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

Слайд 4

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

Слайд 5

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

Слайд 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

Слайд 7

... можна скористатись (стандартною) прив’язкою binding=“basicHttpBinding” (ця прив’язка відповідає відомій специфікації: Web Services Interop Basic Profile 1.1 – WS-I BP1.1) До специфікації веб-сервісів Web-service Interoperability Organization (http://www.ws-i.org). До складу зазначеної організації входять: Microsoft, IBM, Sun, Oracle, Bea Systems, HP etc. Загалом розроблено вже більше 50 специфікацій так званих розширених веб-сервісів (ws-*). WCF

Слайд 8

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

Слайд 9

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

Слайд 10

Прив'язки на замовлення. Приклади (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

Слайд 11

. . . Приклад файлового конфігурування прив'язки Приклад програмного конфігурування прив'язки (приклад 2 з попереднього слайду). Прив'язки. Конфігурування CustomBinding custBinding = new CustomBinding(); custBinding.Elements.Add( new BinaryMessageEncodingBindingElement()); custBinding.Elements.Add( new UdpTransportBindingElement()); WCF

Слайд 12

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

Слайд 13

Прив’язка 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

Слайд 14

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

Слайд 15

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

Слайд 16

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

Слайд 17

Прив’язка webHttpBinding: є сумісною із RESTful-службами. Презентація “WCF REST (RESTful -служби із використанням WCF)” WCF

Слайд 18

Прив’язка webHttpBinding та RESTful-служби. Приклад db table HTTP Get. UriTemplate WCF

Слайд 19

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

Слайд 20

Генерація (із використанням шаблону) WCF-проекту у MS Visual Studio 2008 WCF

Слайд 21

Створення проекту та його запуск Створення проекту та його запуск (Ctrl+F5). Відкриття у браузері. ПКМ Дивись наступний слайд WCF

Слайд 22

Відкриття WCF-проекту браузері (1/2) WCF

Слайд 23

Проксі-клас Відкриття WCF-проекту браузері (2/2) Проксі-клас служби WCF

Слайд 24

Генерація (із використанням шаблону) WCF-проекту у MS Visual Studio 2010 WCF

Слайд 25

Створення проекту та його запуск Як і у Visual Studio 2008, можливий запуск проекту та відкриття у браузері. Окрім цього можна генерувати клієнтський тест-проект (з іменем “WCF Test Client”) WCF

Слайд 26

Ctrl+F5 — генерується клієнтський тест-проект “WCF Test Client” Клієнтський тест-проект WCF MS Visual Studio 2010: автоматична генерація тест-проекту Файл-заготівка з реалізацією контракта (інтерфейса) WCF

Слайд 27

Фрагмент файлу-заготівки з контрактом [ServiceContract] public interface IService1 { [OperationContract] string GetData(int value); [OperationContract] CompositeType GetDataUsingDataContract(CompositeType composite); // TODO: Добавьте здесь операции служб } // Используйте контракт данных, как показано в примере ниже, // чтобы добавить составные типы к операциям служб. [DataContract] public class CompositeType { bool boolValue = true; string stringValue = "Hello "; [DataMember] public bool BoolValue { get { return boolValue; } set { boolValue = value; } } [DataMember] public string StringValue { get { return stringValue; } set { stringValue = value; } } } WCF

Слайд 28

Фрагмент файлу-заготівки з реалізацією контракта (інтерфейса) public class Service1 : IService1 { public string GetData(int value) { return string.Format("You entered: {0}", value); } public CompositeType GetDataUsingDataContract(CompositeType composite) { if (composite == null) { throw new ArgumentNullException("composite"); } if (composite.BoolValue) { composite.StringValue += "Suffix"; } return composite; } } } WCF

Слайд 29

Клієнтський тест-проект WCF MS Visual Studio 2010: автоматична генерація тестів Клієнтський тест-проект “WCF Test Client” public string GetData(int value) { return string.Format("You entered: {0}", value); } WCF

Слайд 30

Клієнтський тест-проект. Тестування операції GetDataUsingDataContract Тестування операції GetDataUsingDataContract WCF

Слайд 31

Тестування операції GetDataUsingDataContract Тестування GetDataUsingDataContract (вигляд XML-повідомлень) WCF

Слайд 32

Клієнтський конфігураційний файл Клієнтський тест-проект. Вигляд конфігураційного файлу WCF

Слайд 33

WSDL-файл служби (1/7) WCF

Слайд 34

WSDL-файл служби (2/7) WCF

Слайд 35

WSDL-файл служби (3/7) WCF

Слайд 36

WSDL-файл служби (4/7) WCF

Слайд 37

WSDL-файл служби (5/7) WCF

Слайд 38

WSDL-файл служби (6/7) WCF

Слайд 39

WSDL-файл служби (7/7) WCF

Слайд 40

WCF. Демонстраційний приклад (із серверним проектом CalcWCF) WCF

Слайд 41

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

Слайд 42

Серверний проект 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

Слайд 43

Серверний проект 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 – модуль із класом реалізації інтерфейса ICalcService.cs (генерується майстром) Пропонується заміна! WCF

Слайд 44

Серверний проект CalcWCF . (4/7) Ще одна версія CalcService.cs (версія для дослідження WCF) 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

Слайд 45

Серверний проект 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

Слайд 46

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

Слайд 47

Серверний проект CalcWCF. (7/7) Запуск проекту та його відкриття у браузері

Слайд 48

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

Слайд 49

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

Слайд 50

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

Слайд 51

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

Слайд 52

Слайд 53

До програмного доступу до метаданих служби. Випадок Файл App.config (фрагмент)

Слайд 54

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

Слайд 55

Metadata Кінцева точка доступу до метаданих служби WCF

Слайд 56

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

Слайд 57

Клієнтський 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

Слайд 58

Клієнтський 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

Слайд 59

Клієнтський 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

Слайд 60

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

Слайд 61

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

Слайд 62

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

Слайд 63

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

Слайд 64

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

Слайд 65

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

Слайд 66

Приклади класів поведінки. Клас OperationBehavior Поведінка рівня операції Приклад із презентації “WCF. Використання транзакцій (для служб ws-*)” WCF

Слайд 67

Файл реалізації контракту Serv.cs (основні конструкції) using System.Data.SqlClient; using System.Transactions; . . . public class Serv : IServ { [OperationBehavior(TransactionScopeRequired = true, TransactionAutoComplete = false)] [TransactionFlow(TransactionFlowOption.Allowed)] public void Update(int sum) { SqlConnection sc = new SqlConnection(@"Data Source=.\SQLEXPRESS; AttachDbFilename=C:\Users\1\Documents\Visual Studio 2010\. . . sc.Open(); string updateSql = "UPDATE Bank1 SET Count= '"+sum.ToString()+"' WHERE id='1'"; Console.WriteLine(string.Format("Service.Update({0}).", sum.ToString())); SqlCommand UpdateCmd = new SqlCommand(updateSql, sc); UpdateCmd.ExecuteNonQuery(); OperationContext.Current.SetTransactionComplete(); } } Допустимий транзакційний потік У проекті використовується розподілена транзакція на основі транзакційного потоку 3 4 WCF

Слайд 68

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

Слайд 69

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

Слайд 70

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

Слайд 71

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

Слайд 72

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

Слайд 73

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

Слайд 74

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

Слайд 75

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

Слайд 76

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

Слайд 77

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 зберігається “станом” результату функції BeginSub WCF

Слайд 78

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

Слайд 79

DataContract. Приклад (1/8). (Для прив’язки basicHttpBinding)

Слайд 80

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

Слайд 81

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

Слайд 82

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

Слайд 83

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

Слайд 84

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

Слайд 85

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

Слайд 86

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

Слайд 87

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

Слайд 88

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

Слайд 89

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

Слайд 90

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

Слайд 91

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

Слайд 92

Додаток WCF

Слайд 93

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

Слайд 94

Проекти 2008/CalcWCF WCF

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

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