210 likes | 360 Views
Windows Communication Foundation – путь к версии 4. Марат Бакиров Эксперт по разработке ПО Microsoft Rus , Ekaterinburg http://blogs.msdn.com/mbakirov. Распределенные приложения. Сеть организации. Сервер Баз данных. Клиент. Сервер. Другой сервер. Интернет. Другой сервер. Сервер.
E N D
Windows Communication Foundation – путь к версии 4 Марат Бакиров Эксперт по разработке ПО Microsoft Rus, Ekaterinburg http://blogs.msdn.com/mbakirov
Распределенные приложения Сеть организации Сервер Баз данных Клиент Сервер Другой сервер Интернет Другой сервер Сервер Клиент Другой сервер
Подход SOAP WSDL Клиент Сервис POST /AccountAccess/Accounts.svc Host: www.quickbank.com SOAPAction: GetBalance … <soap:Envelopexmlns:soap= … <soap:Body> <GetBalancexmlns= … <Account>100</Account> </GetBalance> </soap:Body> </soap:Envelope> Account 1 Account 2 Account 3
Подход к программированию. POST /AccountAccess/Accounts.svc Host: www.quickbank.com SOAPAction: GetBalance … <soap:Envelopexmlns:soap= … <soap:Body> <GetBalancexmlns= … <Account>2</Account> </GetBalance> </soap:Body> </soap:Envelope> GetBalance(2) Client App Server GetBalance(intAccountId) Client Proxy GetBalance(intAccountId) 100$ . . . <Balance> 100 </Balance> . . .
C C C B B B A A A Address, Binding, Contract Адрес, Связывание, Контракт Клиент Сервис Сообщение Address Binding Contract (Где) (Как) (Что)
WCF (Windows Communication Foundation)- реализация • WCF основан на слоях • Стандартные слои • Код, сообщения (кодировки),транспортный WCF Client WCF Service КОД КОД КОДИРОВКА КОДИРОВКА EXTRA EXTRA Transport Channel Transport Channel HTTP, TCP, MSMQ, etc.
Cool • Один раз пишем код логики, используем (одновременно) разные транспорты. • Можно с помощью конфигурации менять порты, адреса, etc. • Можно один раз писать код сервиса, и выдавать несколько точек входа (endpoints) • Можно обойтись без IIS (консольное приложениеили сервис) • Много стандартных настроек совместимых с ws-*, MSMQ и т.п.
Контракт сервиса (WCF 3.0) [ServiceContract] public interface IBalancer { [OperationContract] Double GetBalance (intAccountId); [OperationContract] CusttomerDescGetCustomer (intAccountId); }
Подход REST Клиент Сервер GET www.quickbank.com/Accounts/2 Account 1 Account 2 <Account> <Name>ZAO MMM</Name> <Owner>Mavrodi</Owner> </Account> Account 3
Контракт сервиса (WCF 3.5) [ServiceContract] public interface IBalancer { [OperationContract] [WebGet(UriTemplate = "Accounts/{AccountId})")] AcccountGetAccount(string AccountId); [OperationContract] [WebGet(UriTemplate = "Accounts")] Double[] GetCustomers(); [OperationContract] // это для силверлайта [WebGet(UriTemplate = "/clientacccesspolicy.xml")] Stream GetClientPolicy(); }
Astoria. From Accounts where AccountId=2 select Account http://service/Accounts?q=.... Client App Server Customers Orders …. Client Proxy Customers* Orders* ….. Account ZAO MMM MAvrodi <Account> <Name>ZAO MMM</Name> <Owner>Mavrodi</Owner> </Account>
Cool • Syndication (почти готовые шаблоны для RSS/Atom) • Поддержка JSON и XML • JSON = {“firstnamename”:”vasya”,”lastname”:”pupkin”} • VS 2008: Поддержка для генерации прокси для JavaScript
WCF REST Starter Kit • Help • HTTP Accept Request Header • Декларативное кеширование • HttpClient • Шаблоны • Atom Feed WCF Service • REST Singleton WCF Service • REST Collection WCF Service • Atom Publishing Protocol WCF Service • HTTP Plain XML WCF Service
WCF 4.0 • Упрощенная конфигурация (можно не писать половину того что мы пишем в app.config) • Хостинг в IIS без SVC. • UDP обнаружение • Router (декларативные и императивные фильтры) • Улучшенная поддержка REST • Улучшенная интеграция с Workflow
Итоги + ссылки • Архитектура WCF не претерпевает существенных изменений. • Что означает, что она удачна. • Ссылки • http://msdn.microsoft.com/wcf • http://msdn.microsoft.com/wcf/rest