Windows Communication Foundation Microsoft 2010 2011 WCF Windows
- Slides: 98
Windows Communication Foundation (від Microsoft) 2010 -2011 WCF
Windows Communication Foundation (WCF) WCF 2
Кінцеві точки WCF. Контракти. Контракт служби (Service. Contract). Приклад namespace Calc. WCF_VS 2013 { [Service. Contract] public interface ICalc. Service { [Operation. Contract] double Add(double a 1, double a 2); } } ICalc. Service. cs – модуль з інтерфейсом (фрагмент) Calc. Service. cs – модуль із namespace Calc. WCF_VS 2013 класом реалізації інтерфейса ICalc. Service. cs(фрагмент) { public class Calc. Service : ICalc. Service { public double Add(double a 1, double a 2){ Console. Write. Line(string. Format("Adding {0} and {1}", a 1, a 2)); return a 1 + a 2; } } } WCF 6
Прив'язки “на замовлення”. Приклади (1/2) Приклад 1. Custom. Binding custom. Binding = new Custom. Binding( new One. Way. Binding. Element(), //канальна форма new Text. Message. Encoding. Binding. Element(), new Http. Transport. Binding. Element() ); Поняття прив'язки можна розглядати як деякий аналог поняття стеку каналів. . . Приклад 2. Custom. Binding cust. Binding = new Custom. Binding(); cust. Binding. Elements. Add( new Binary. Message. Encoding. Binding. Element()); cust. Binding. Elements. Add( new Udp. Transport. Binding. Element()); WCF 19
Прив'язки. Конфігурування Приклад програмного конфігурування прив'язки (приклад 2 з попереднього слайду). Custom. Binding cust. Binding = new Custom. Binding(); cust. Binding. Elements. Add( new Binary. Message. Encoding. Binding. Element()); cust. Binding. Elements. Add( new Udp. Transport. Binding. Element()); Приклад файлового конфігурування прив'язки <? xml version="1. 0" encoding="utf-8"? > <configuration> <system. service. Model> <bindings> <custom. Binding> <binding name = "Custom. Binding"> <binary. Message. Encoding/> <udp. Transport/> </binding> </custom. Binding> </bindings>. . . </system. service. Model> WCF </configuration> 20
Стандартні прив’язки (msdn) https: //msdn. microsoft. com/en-us/library/aa 738737(v=vs. 110). aspx WCF 22
Прив’язка basic. Http. Binding. Приклад конфігурування властивостей такої прив’язки <configuration> <system. service. Model> <bindings> <basic. Http. Binding> <binding name="Basic. Http. Binding. My. Service” close. Timeout="00: 01: 00” open. Timeout="00: 01: 00” receive. Timeout="00: 10: 00" send. Timeout="00: 01: 00” max. Buffer. Size="65536" max. Buffer. Pool. Size="524288” max. Received. Message. Size="65536" message. Encoding="Text" text. Encoding="utf-8" transfer. Mode="Buffered"> </binding> </basic. Http. Binding> </bindings> <client> <endpoint address="http: //localhost: 33333/My. Service" binding="basic. Http. Binding" binding. Configuration = "Basic. Http. Binding. My. Service" contract="Service. Reference. IService" name = "Basic. Http. Binding. My. Service"/> </client> </system. service. Model> </configuration> WCF 24
Прив’язка web. Http. Binding та RESTful-служби. Приклад HTTP Get. Uri. Template db WCF table 28
Client. Calc. WCF_VS 2013 — клієнтський проект. Form 1. cs (фрагмент) public partial class Form 1 : Form { Namespace Файл Form 1. cs (фрагмент) Service. Reference 1. Calc. Service. Client proxy; І’мя класу проксі public Form 1() { Initialize. Component(); proxy = new Service. Reference 1. Calc. Service. Client(); } private void button 1_Click(object sender, Event. Args e) { double a 1 = double. Parse(text. Box 1. Text); double a 2 = double. Parse(text. Box 2. Text); double result = proxy. Add(a 1, a 2); label 1. Text = "" + result; } } WCF 31
Client. Calc. WCF_VS 2013 — клієнтський проект. Файл App. config <? xml version="1. 0" encoding="utf-8" ? > <configuration> <startup> <supported. Runtime version="v 4. 0” sku=". NETFramework, Version=v 4. 5. 1" /> </startup> <system. service. Model> <bindings> <basic. Http. Binding> <binding name="Basic. Http. Binding_ICalc. Service" /> </basic. Http. Binding> </bindings> <client> <endpoint address="http: //localhost: 17209/Calc. Service. svc” binding="basic. Http. Binding" binding. Configuration="Basic. Http. Binding_ICalc. Service” contract="Service. Reference 1. ICalc. Service" name="Basic. Http. Binding_ICalc. Service" /> </client> </system. service. Model> </configuration> WCF 32
Ще одна версія Calc. Service. cs для дослідження WCF Із використанням public class Calc. Service : ICalc. Service GUID ! { private Guid m_guid; public Calc. Service() { m_guid = Guid. New. Guid(); Console. Write. Line("Calc. Service created. New GUID: {0}", m_guid. To. String()); } public double Add(double a 1, double a 2) { Console. Write. Line(string. Format( "Adding {0} and {1}; GUID is {2}", a 1, a 2, m_guid. To. String())); return a 1 + a 2; } } WCF 34
Calc. WCF. Можливості хостінгу. Модуль Program. cs using using System; System. Collections. Generic; System. Linq; System. Text; Calc. WCF – self-hosted проект System. Service. Model; Підтримка такого хостінгу пов'язується з проектом “Indigo” namespace Calc. WCF { class Program { static void Main(string[] args) { Service. Host shost = new Service. Host(typeof(Calc. Service)); shost. Open(); Console. Write. Line("Ready!"); Console. Read. Line(); shost. Close(); Console. Write. Line("Closed"); } } } WCF 35
Серверний проект Calc. WCF. Конфігураційний файл App. config (фрагмент) <service behavior. Configuration="Calc. WCF. Calc. Service. Behavior" name="Calc. WCF. Calc. Service"> <endpoint address="" binding="ws. Http. Binding” contract="Calc. WCF. ICalc. Service"> </endpoint>. . . <host> Інтерфейс (WCF-служби) – контракт кінцевої точки (endpoint) <base. Addresses> <add base. Address= "http: //localhost: 8731/Design_Time_Addresses/Calc. WCF/Calc. Service/"/> </base. Addresses> </host> </service> Система конфігурування. Net Framework спряжена із середовищем розгортання. Якщо для IIS в якості конфігураційного файлу має виступати Web. config, то в інших випадках – App. config. WCF 36
Пригадаємо WS і зіставимо з WCF Серверний проект Calc. WCF. (7/7) Запуск проекту та його відкриття у браузері App. config <endpoint address="". . . <host> <base. Addresses> <add base. Address= (фрагмент) "http: //localhost: 8731/Design_Time_Addresses/Calc. WCF/Calc. Service/"/> . . . WCF 37
Чим забезпечується можливість доступу до метаданих служби та отримання її WSDL-опису у браузері? (1/3) • По-перше, App. config містить описи двох (!) кінцевих точок WCF-служби <services> <service behavior. Configuration="Calc. WCF. Calc. Service. Behavior" name="Calc. WCF. Calc. Service"> <endpoint address="" binding="ws. Http. Binding” contract="Calc. WCF. ICalc. Service"> </endpoint> Кінцева точка метаданих <endpoint address="mex" binding="mex. Http. Binding” contract="IMetadata. Exchange" /> <host> "mex” – від Metadata. Exchange <base. Addresses> <add base. Address= "http: //localhost: 8731/Design_Time_Addresses/Calc. WCF/Calc. Service/"/> </base. Addresses> </host> </services> Файл App. config (фрагмент) WCF 40
Чим забезпечується можливість доступу до метаданих служби та отримання її WSDL-опису у браузері? (2/3) • По-друге, в App. config міститься опис спеціальної поведінки (behavior) WCF-служби <behaviors> Файл App. config (фрагмент) <service. Behaviors> <behavior name="Calc. WCF. Calc. Service. Behavior"> <service. Metadata http. Get. Enabled="true" /> </behavior> За замовчуванням (!)– ”false" </service. Behaviors> Надається можливість доступу до метаданих </behaviors> безпосередньо із браузера, використовуючи операцію GET протоколу HTTP <services> <service behavior. Configuration="Calc. WCF. Calc. Service. Behavior" name="Calc. WCF. Calc. Service"> <endpoint address="" binding="ws. Http. Binding” contract="Calc. WCF. ICalc. Service"> </endpoint> <endpoint address="mex" binding="mex. Http. Binding” contract="IMetadata. Exchange" /> WCF 41
Чим забезпечується можливість доступу до метаданих служби та отримання її WSDL-опису у браузері? (3/3) <behavior name="Calc. WCF. Calc. Service. Behavior"> <service. Metadata http. Get. Enabled="true" /> </behavior> Файл App. config (фрагменти) <service behavior. Configuration="Calc. WCF. Calc. Service. Behavior" name="Calc. WCF. Calc. Service"> <endpoint address="mex" binding="mex. Http. Binding” contract="IMetadata. Exchange" /> WCF 42
Кінцева точка доступу до метаданих служби Metadata <endpoint address="mex” binding="mex. Http. Binding” contract= "IMetadata. Exchange" /> WCF 45
Клієнтський Win. Forms-проект Calc. Client. Файл app. config (фрагмент) <client> <endpoint address= "http: //localhost: 8731/Design_Time_Addresses/Calc. WCF/Calc. Service/" binding="ws. Http. Binding” binding. Configuration="WSHttp. Binding_ICalc. Service" contract="Calc. Ref. ICalc. Service” name="WSHttp. Binding_ICalc. Service"> </endpoint> Файл app. config (фрагмент) </client> WCF 46
- Як впливати? - Behavior! Пригадаємо… Чим забезпечується можливість доступу до метаданих служби та отримання її WSDL-опису у браузері? (3/3) <behavior name="Calc. WCF. Calc. Service. Behavior"> <service. Metadata http. Get. Enabled="true" /> </behavior> Файл App. config (фрагменти) <service behavior. Configuration="Calc. WCF. Calc. Service. Behavior" name="Calc. WCF. Calc. Service"> <endpoint address="mex" binding="mex. Http. Binding” contract="IMetadata. Exchange" /> WCF 48
Behavior (Поведінка) Behaviors Metadata <endpoint address="mex” binding ="mex. Http. Binding” contract = "IMetadata. Exchange" /> WCF 50
Приклади класів поведінки. Клас Service. Metadata. Behavior <behavior name="Calc. WCF. Calc. Service. Behavior"> <service. Metadata http. Get. Enabled="true" /> </behavior> Файл App. config (фрагменти) <service behavior. Configuration="Calc. WCF. Calc. Service. Behavior" name="Calc. WCF. Calc. Service"> <endpoint address="mex" binding="mex. Http. Binding” contract="IMetadata. Exchange" /> Використання поведінки у програмному коді Поведінка рівня служби Service. Metadata. Behavior behavior = new Service. Metadata. Behavior(); behavior. http. Get. Enabled = true; host. Description. Behaviors. Add(behavior); WCF 51
Файл реалізації контракту Serv. cs (основні конструкції) У проекті використовується розподілена транзакція на основі транзакційного потоку using System. Data. Sql. Client; using System. Transactions; . . . public class Serv : IServ { [Operation. Behavior(Transaction. Scope. Required = true, 3 Transaction. Auto. Complete = false)] [Transaction. Flow(Transaction. Flow. Option. Allowed)] Допустимий транзакційний потік public void Update(int sum) { 4 Sql. Connection sc = new Sql. Connection(@"Data Source=. SQLEXPRESS; Attach. Db. Filename=C: Users1DocumentsVisual Studio 2010. . . sc. Open(); string update. Sql = "UPDATE Bank 1 SET Count= '"+sum. To. String()+"' WHERE id='1'"; Console. Write. Line(string. Format("Service. Update({0}). ", sum. To. String())); Sql. Command Update. Cmd = new Sql. Command(update. Sql, sc); Update. Cmd. Execute. Non. Query(); } } Operation. Context. Current. Set. Transaction. Complete(); WCF 53
Клас Instance. Context. Mode та режими інстанціації (instance) або об’єктні режими • Per. Session — режим за замовчуванням; • Per. Call; • Single. Пригадаємо. Net Remoting Варіанти. Net Remoting активації: – клієнтська; – серверна з режимами: • Singleton; • Single. Call. [Service. Behavior(Instance. Context. Mode = Instance. Context. Mode. Single)] public class Calc. Service : ICalc. Service WCF Calc. Service. cs (фрагмент) 55
Приклад використання режиму Per. Session [Service. Behavior(Instance. Context. Mode = Instance. Context. Mode. Per. Session)] public class Calc. Service : ICalc. Service. cs (фрагмент) Доданий атрибут. Проте нагадаємо, що Per. Session є режимом за замовчуванням. WCF 59
WCF. Підтримка асинхронних викликів. (2/4). Серверний проект Calc. WCF_Async. public class Calc. Async. Service : ICalc. Async. Service { Calc. Async. Service. cs public double Sub(double a 1, double a 2) (фрагмент) { Console. Write. Line(Date. Time. Now); Console. Write. Line(string. Format( "Waiting Sub {0} and {1}", a 1, a 2)); System. Threading. Thread. Sleep(10000); //для затримки! Console. Write. Line("Sub is ready"); Console. Write. Line(Date. Time. Now); return a 1 - a 2; } } WCF 61
WCF. Підтримка асинхронних викликів. (4/4). Клієнтський проект • Традиційний підхід. Net із використанням трійки: типу IAsync. Result та функцій Begin*, End*. Form 1. cs (фрагмент — методи класу форми) Метод Sub. Call. Back private void button 2_Click(object sender, Event. Args e) викликається після { завершення асинхронної double a 1 = double. Parse(text. Box 3. Text); операції double a 2 = double. Parse(text. Box 4. Text); IAsync. Result ar. Sub = proxy 2. Begin. Sub( a 1, a 2, Sub. Call. Back , proxy 2 ); } void Sub. Call. Back(IAsync. Result ar) proxy 2 зберігається { “станом” результату функції Begin. Sub double result = ((Calc. Async. Service. Client)ar. Async. State). End. Sub(ar); label 2. Text = "" + result; Form 1. cs (фрагмент). Message. Box. Show("Sub is ready"); } (Методи класу форми. ) WCF 63
Data. Contract. Приклад. (1/8). (Приклад із використанням прив’язки basic. Http. Binding) Файл App. config (фрагмент) <!-<endpoint address="" binding="ws. Http. Binding” contract="Data. Contract. Pr. IComplex. Add"> --> <endpoint address="" binding="basic. Http. Binding” contract="Data. Contract. Pr. IComplex. Add"> WCF 65
Data. Contract. Приклад. (2/8). Інтерфейс служби та Data. Contract–клас Complex. Number [Service. Contract] IComplex. Add. cs public interface IComplex. Add (фрагмент) { [Operation. Contract] Complex. Number Add(Complex. Number a, Complex. Number b); } [Data. Contract] public class Complex. Number { [Data. Member(Name = "Real. Part", Order = 0, Is. Required = true)] public double Real; [Data. Member(Name = "Imaginary. Part", Order = 1, Is. Required = true)] public double Imaginary; public Complex. Number(double re, double im) { this. Real = re; this. Imaginary = im; } } WCF 66
Data. Contract. Приклад. (3/8). Реалізація інтерфейсу служби namespace Data. Contract. Pr { public class Complex. Add : IComplex. Add { public Complex. Number Add(Complex. Number a, Complex. Number b) { return new Complex. Number(a. Real + b. Real, a. Imaginary + b. Imaginary); } } Complex. Add. cs } (фрагмент) WCF 67
Data. Contract. Приклад. (4/8). WSDL-файл служби http: //localhost: 8731/Design_Time_Addresses/Data. Contract. Pr /Complex. Add/? wsdl WCF 68
Data. Contract. Приклад. (5/8). XML Schema. Definition (xsd 2 – імпортована частина WSDL ) http: //localhost: 8731/Design_Time_Addresses/Data. Contract. Pr/ Complex. Add/? xsd=xsd 2 WCF 69
Data. Contract. Приклад. (6/8). Порівняння Data. Contract та XML Schema [Data. Contract] public class Complex. Number { [Data. Member(Name = "Real. Part", Order = 0, Is. Required = true)] public double Real; [Data. Member(Name = "Imaginary. Part", Order = 1, Is. Required = true)] public double Imaginary; . . . } WCF 70
Data. Contract. Приклад. (7/8). xsd 0 – імпортована частина WSDL http: //localhost: 8731/Design_Time_Addresses/Data. Contract. Pr/ Complex. Add/? xsd=xsd 0 WCF 71
Data. Contract. Приклад. (8/8). xsd 1 – імпортована частина WSDL http: //localhost: 8731/Design_Time_Addresses/Data. Contract. Pr/ Complex. Add/? xsd=xsd 1 WCF 72
Message. Contract. Приклад. (1/3). Інтерфейс служби та класи-повідомлення [Service. Contract] IMessage. Service. cs public interface IMessage. Service (фрагмент) { [Operation. Contract] Output. Message Calculate(Input. Message request); } [Message. Contract] public class Input. Message { [Message. Header] public string date_time {get; set; } [Message. Body. Member] public double a {get; set; } [Message. Body. Member] public double b {get; set; } } [Message. Contract] public class Output. Message { [Message. Header] public string date_time {get; set; } [Message. Body. Member] public double result {get; set; } WCF } 74
Message. Contract. Приклад. (2/3). Реалізація інтерфейсу служби public class Message. Service : IMessage. Service { public Output. Message Calculate(Input. Message request) { Output. Message out. Message = new Output. Message(); out. Message. result = request. a + request. b; out. Message. date_time = Date. Time. Now. To. String(); return out. Message; } Message. Service. cs } (фрагмент) WCF 75
Message. Contract. Приклад. (3/3). Фрагмент клієнтського проекту private void button 1_Click(object sender, Event. Args e) Message. Pr. Client. cs (фрагмент) { double a 1 = double. Parse(text. Box 1. Text); double a 2 = double. Parse(text. Box 2. Text); Message. Service. Client proxy = new Message. Service. Client(); Input. Message in. Message = new Input. Message(); in. Message. a = a 1; in. Message. b = a 2; in. Message. date_time = Date. Time. Now. To. String(); Output. Message out. Message = proxy. Calculate(in. Message); label 1. Text = "" + out. Message. result + " (" + in. Message. date_time + "---"+out. Message. date_time+ ")"; } WCF 76
Фрагмент файлу-заготівки з контрактом [Service. Contract] public interface IService 1 { [Operation. Contract] string Get. Data(int value); [Operation. Contract] Composite. Type Get. Data. Using. Data. Contract(Composite. Type composite); // TODO: Добавьте здесь операции служб } // Используйте контракт данных, как показано в примере ниже, // чтобы добавить составные типы к операциям служб. [Data. Contract] public class Composite. Type { bool. Value = true; string. Value = "Hello "; [Data. Member] public bool Bool. Value { get { return bool. Value; } set { bool. Value = value; } } [Data. Member] public string String. Value { get { return string. Value; } set { string. Value = value; } } WCF 86 }
Фрагмент файлу-заготівки з реалізацією контракта (інтерфейса) public class Service 1 : IService 1 { public string Get. Data(int value) { return string. Format("You entered: {0}", value); } public Composite. Type Get. Data. Using. Data. Contract(Composite. Type composite) { if (composite == null) { throw new Argument. Null. Exception("composite"); } if (composite. Bool. Value) { composite. String. Value += "Suffix"; } return composite; } } } WCF 87
Клієнтський тест-проект WCF MS Visual Studio 2010: автоматична генерація тестів Клієнтський тест-проект “WCF Test Client” public string Get. Data(int value) { return string. Format("You entered: {0}", value); } WCF 88
Тестування операції Get. Data. Using. Data. Contract Тестування Get. Data. Using. Data. Contract (вигляд XML-повідомлень) WCF 90
- Windows communication foundation wcf monitoring
- Microsoft windows small business server 2011 essentials
- Microsoft windows small business server 2011 essentials
- Windows identity foundation windows 10
- Schuljahr 2010/2011
- Microsoft windows movie maker
- Pad foundation
- Foundation standard 1 academic foundation
- How can you import your movie assets to wlmm?
- How can you import your movie assets to wlmm?
- Xp embedded builder
- Wcf ria services
- Wcf load balancing
- Rules for gc
- Wcf mutual insurance company
- Wcfover
- Wcf rules of golf croquet
- Wcf lifecycle
- Microsoft project schedule tutorial
- Microsoft visio 2010 trial
- Getting started with microsoft outlook learning
- Aplikasi pengolah angka dari microsoft adalah
- Excel 2010 training
- Microsoft exchange 2010 email archiving
- Visual studio 2010 express
- Microsoft forefront protection 2010 for exchange server
- Microsoft project tutorial 2010
- Pengoperasian power point
- Visual studio 2010 express
- Microsoft project tutorial
- Microsoft lync 2010 attendee
- Microsoft power point 2010
- Microsoft lync 2010 attendee
- Windows embedded standard 7 iso
- Microsoft foundation class library
- Windows platform foundation
- Systemparametersinfo
- Windows workflow foundation
- Windows driver foundation disable
- Windows driver foundation user mode driver framework
- Local session manager
- Microsoft official academic course microsoft word 2016
- Microsoft official academic course microsoft excel 2016
- Edge startwarren theverge
- Excel merupakan program aplikasi
- Microsoft official academic course microsoft word 2016
- Microsoft-windows-kernel-process
- Microsoft windows office teams rajesh
- Introducción de microsoft word
- Mark overmars gamemaker
- Windows 7 premiera
- Microsoft windows tutorial
- Microsoft windows armendicott
- Microsoft windows logos
- Microsoft windows logos
- Windows microsoft.com
- Windows storage server 2003
- Microsoft windows 10 security update
- Windows filtering platform
- Doug jones windows
- Windows microsoft.com
- Microsoft windows internals
- Microsoft windows 2005
- Microsoft is changing to black windows
- Microsoft back against windows
- Microsoft windows 3.x
- Microsoft windows startwarren
- What is windows image acquisition
- Longhorn version
- Lab 16-3 microsoft windows os security settings
- Application compatibility toolkit.msi
- Movie maker live
- Windows media player 9 windows 2000
- Windows live mail xp
- Windows driver kit windows 7
- Media player skin
- Upgrade windows 7 to windows 10
- Windows xp virtual machine
- Windows mobile center windows 10
- Window movie maker 2012
- Ipseq
- Xp mode windows 7
- Parallel vs serial communication
- What is oral communication and written communication
- Parallel serial communication
- Examples of mass communication
- Diff between oral and written communication
- Serial communication vs parallel communication
- World youth day spain
- The practice of public relations fraser p. seitel pdf
- Uma equipe de cientistas lançará uma expedição
- Per-30/pb/2011
- Yevarejeja yahweh
- Roberto puente dorothea puente
- Sage act 2011
- Chemistry regents 2011
- 2011-1989
- There names
- Perfil de egreso primaria