SlideShare a Scribd company logo
1 of 54
Windows
Communication Foundation
Part 2
Что такое WCF?
Address Binding Contract
(ABC)
Клиент Сервис
СообщениеABC A B C
Адрес
(Где)
Привязки
(Как)
Контракт
(Что)
Конечная точка
(Endpoint)
Поведение (Behavior)
Клиент Сервис
СообщениеABC A B CBv Bv
Выполнение (Hosting)
Клиент Сервис
СообщениеABC A B C
A B C
Metadata
Bv Bv
Bv Bv
Proxy ServiceHost<T>()
Hosting Environments
WAS IIS .exe Windows
Service DllHost
Типы контрактов Контракт
(Что)
• Описывает операции,
выполняемые сервисом
• CLR тип соответствует WSDL
Service
• Структура данных
• CLR тип соответствует XSDData
• Структура сообщений
• CLR тип соответствует SOAP
сообщению
Message
Binding(Как?)
Address (Где?)
Contract (Что?)
Привязки
Просторы интернета
Привязки
(Как)
Поведение
Поведение предназначено для модификации и
расширения функциональности сервиса или клиента
Поведение
(Behavior)
[ServiceBehavior(
InstanceContextMode =
InstanceContextMode.Single,
IncludeExceptionDetailInFaults = true)]
public class Service : IService {
[OperationBehavior(
ReleaseInstanceMode =
ReleaseInstanceMode.AfterCall)]
public DateTime GetCurrentDate() {
return DateTime.Now;
}
SingleMultiplePerSessionSingle
Instancing & Concurrency
Service
InstanceContextMode ConcurrencyMode
PerSession
PerCall
Single
Single
Reentrant
Multiple
Поведение
(Behavior)
Практика
Итоги
• WCF обобщает все предыдущие технологии меж процессорного
взаимодействия
• Транспорт: HTTP, TCP, NamedPipes, MSMQ, Custom
• Кодировка: Text, Binary, MTOM, Custom
• Поддерживаются сессии, гарантия доставки, шифрование,
транзакции, …., Custom
• Взаимодействие с сервером прозрачно для клиента
• Контракт говорит – Что
• Привязка говорит – Как
• Адрес говорит – Где
• Поведение молча манипулирует сервисом 
Безопасность
Безопасность
• Конфиденциальность (confidentiality)
• Целостность (integrity)
• Безопасность:
o на уровне сообщения
o на уровне транспорта
• Аутентификация:
o Username
o Сертификаты
o Windows
o SAML токены
Режимы безопасности
• отсутствует (None)
• на уровне сообщения (Message)
• на транспортном уровне (Transport)
• смешанный (TransportWithMessageCredential)
• двухуровневый (Both)
• TransportCredentialOnly (basicHttpBinding only)
клиент сервис
клиент сервис0523422E8A8
клиент сервис
Шифрование транспорта
Производительность
Аппаратное шифрование
Потоковая передача данных
Point-to-point безопасность
клиент сервис1 сервис2
Шифрование сообщение
End-to-end безопасность
Независимость от транспортного уровня
Частичное шифрование или подпись сообщения
ProtectionLevel атрибут [None | Sign | EncryptAndSign]
Более ресурсоемко чем шифрование транспорта
клиент сервис1 сервис20523422E8A8 0523422E8A8
Безопасность и привязки
Binding None Transport Message Mixed Both
basicHttpBinding + + + +
netTCPBinding + + + +
netPeerTCPBinding + + + +
netNamedPipeBinding + +
wsHttpBinding + + + +
wsFederationHttpBinding + +
wsDualHttpBinding + +
netMsmqBinding + + + +
- доступно - по умолчанию++
Практика
Сценарий: Публичный WCF-сервис
userNamePasswordValidationMode
[Windows | Custom | Membership]
Username
Windows
X509 сертификат
SSL
сертификат
Сценарий: B-2-B WCF-сервис
заявки
X509 сертификат
X509
сертификат
STS
Сценарий: Корпоративный WCF-сервис
• Бинарное сжатие
• Имперсонация/делегирование
• Шифрование билетом Kerberos
Windows
Windows
контроллер
домена
Итоги
• Безопасность по умолчанию включена
• Безопасность на уровне транспорта и SOAP
сообщения
• Интероперабельность
• WS-Security
• SAML токены
• Поддержка большинства стандартных сценариев
• Расширяемость и гибкость
Расширяемость WCF
WCF
Клиент Сервис
Proxy Dispatcher
Contract
Channel stack
Transactions
Reliability
Security
Encoder
Transport
Channel stack
Transactions
Reliability
Security
Encoder
Transport
Address
Binding
Расширяемость прокси-клиента
Метод 1 Метод 2
ClientOperation ClientOperation
ClientRuntime
…
Encoder
Transport
ОбъектыОбъекты
Сообщение
1
2
3
Проверка
параметров
1
Формирование
сообщения
(сериализация)
2
Проверка
сообщения
3
Channel stack
Расширяемость диспетчера
Операция 1 Операция 2
DispatchOperation DispatchOperation
DispatchRuntime
…
Encoder
Transport
5
3
2
Channel stack
1
4
1 Проверка
сообщения
2 Выбор операции
Формирование
объекта
(десериализация)
3
4
Вызов
операции
5
Проверка
параметров
ОбъектыОбъекты
Сообщение
Интерфейсы расширений
Этап Интерфейс перехватчика Описание
Проверка
параметров
IParameterInspector
Используется до и после вызова
для проверки и изменения
значений параметров
Форматирование
сообщений
IDispatchMessageFormatter
IClientFormatter
Используется для сериализации и
десериализации
Проверка
сообщений
IDispatchMessageInspector
IClientMessageInspector
Используется до отправки и после
получения для проверки и замены
содержимого сообщений
Выбор операций
IDispatchOperationSelector
IClientOperationSelector
Используется для выбора
вызываемой операции для
определенного сообщения
Вызов операции IOperationInvoker
Используется для вызова
операции
Клиент Сервис
Клиент Сервис
Клиент Сервис
Клиент Сервис
Сервис
Интерфейсы расширений
• IInstanceProvider
 GetInstance(InstanceContext);
 ReleaseInstance(InstanceContext, Instance);
• IErrorHandler
• HandleError(Exception) : bool
• ProvideFault(Exception, MessageVersion, ref Message)
Поведение
• Это особый тип класса, расширяющий поведение серверной или
клиентской среды выполнения
• Поведения применяются к классам ServiceHost на сервере и
ChannelFactory на клиенте
• 4 типа пользовательских поведений:
 Сервис (IServiceBehavior)
 Конечная точка (IEndpointBehavior)
 Контракт (IContractBehavior)
 Операция (IOperationBehavior)
• IBehavior
• Validate
• AddBindingParameters
• ApplyDispatchBehavior
• ApplyClientBehavior
Уровни влияния поведений
Контекст Интерфейс Влияние
Service Endpoint Contract Operation
Service IServiceBehavior ✗ ✗ ✗ ✗
Endpoint IEndpointBehavior ✗ ✗ ✗
Contract IContractBehavior ✗ ✗
Operation IOperationBehavior ✗
Практика
WCF 4.0 What’s new?
WCF 4.0
• WCF
• Activation Service
• Routing Service
• WS-Discovery
• Standard Endpoints
• HTTP Decompression on Client (Gzip)
• WCF REST
• Caching
• Auto select format
Обнаружение WCF
Клиент СервисСервис
Discovery
Request
Discovery
Endpoint
Discovery
Response
СервисСервис
Discovery
Endpoint
Discovery
Response
Discovery
Request
Discovery
Endpoint
Discovery
Response
Сервис
Оповещение ON/OFF
Announcements
Endpoint
Сервис
Hello/Bye
СервисСервис
Hello/Bye
Discovery
Endpoint
Клиент
Сделаем сервис обнажаемым
• Программная реализация:
• Либо в конфиге:
<services>
<service name = "MyService">
<endpoint kind="udpDiscoveryEndpoint" />
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior>
<serviceDiscovery/>
</behavior>
</serviceBehaviors>
</behaviors>
ServiceHost host = new ServiceHost(...);
host.AddServiceEndpoint(new UdpDiscoveryEndpoint());
var discovery = new ServiceDiscoveryBehavior();
host.Description.Behaviors.Add(discovery);
host.Open();
kind
• UdpDiscoveryEndpoint
• UpdAnnouncementEndpoint
• DynamicEndpoint
Давайте найдем сервис
var discoveryClient =
new DiscoveryClient(new UdpDiscoveryEndpoint());
FindCriteria criteria = new FindCriteria(typeof(IMyContract));
criteria.MaxResults = 1;
FindResponse discovered = discoveryClient.Find(criteria);
discoveryClient.Close();
EndpointAddress address = discovered.Endpoints[0].Address;
Binding binding = new NetTcpBinding();
var factory = new ChannelFactory<IMyContract>(binding, address);
IMyContract proxy = factory.CreateChannel()
proxy.MyMethod();
((ICommunicationObject)proxy).Close();
Практика
Publish-Subscribe Pattern
Publisher
Pub/Sub
Service
Publish
Announcements
Endpoint
Discovery
Endpoint
Subscriber
Hello/Bye
Subscriber
Discover
Pub/Sub
Discovery
Endpoint
Discover
Subscribers
SOAP vs REST
prevContactIndex++;
return Contacts[prevContactIndex];
SOAP – это выполнение операции
SOAP
Service
POST /ServiceAccess/MyService1.svc
Host: www.site.com
SOAPAction: GetNextContact
…
<soap:Envelope xmlns:soap= …
…
</soap:Envelope>
SOAP
Client
Contact Data
return GetContact(2);
REST – это запрос ресурса
REST
Service
GET site.com/MyService1.svc/Contact(2)
REST
Client
Contact Data
Принципы REST
• Пользователь взаимодействуют с ресурсами, которыми может
быть всё, что можно поименовать
• Каждый ресурс имеет свой уникальный идентификатор – URI
• Взаимодействие с ресурсами происходит по средствам HTTP
(команды GET, POST, PUT и DELETE)
• Ресурсы описывают себя сами
• Content-Type, Content-Length, …
• В ресурсах могут содержатся ссылки на другие ресурсы
Ограничения REST
• Stateless – отсутствие состояния у сервера. Вся информация,
необходимая для обработки запроса ресурса, содержится в
самом запросе
• Idempotent – повторное действие над объектом не
изменяет его
• Side Effects – запрашивая значение объекта по GET не должно
происходить изменение этого или другого объекта
• HTTP only
Интернет магазин
Клиенты
Клиент 1
Клиент 2
Счет 1
Счет 2
……
Клиент N
Ресурс URI
Клиенты mysite.com/Clients/
Клиент mysite.com/Clients/{Client}
Счет mysite.com/Clients/{Client}/{account}
…. …..
WebGet WebInvoke
• WebGet – связывает метод с HTTP GET запросом
• WebInvoke – все остальные HTTP запросы (POST, PUT, …)
• UriTemplate – шаблон URI для связывания метода с запросом
Практика
OData
Протокол доступа к данным
основанный на REST
архитектуре
Адресация данных
• Обращение к коллекции объектов
• http://../Service.svc/Customers
• Обращение к объекту по PK
• http://../Service.svc/Customers(523)
• Обращение к полю объекта
• http://../Service.svc/Customers(523)/Name
• Обращение к коллекции объектов с сортировкой
• http://../Service.svc/Customers?$orderby=Name
• Обращение к коллекции объектов с фильтрацией
• http://../Service.svc/Customers?$filter=Created gt ’2008-01-01’
• Постарничный доступ
• http://../Service.svc/Customers?$top=10&$skip=20
Контроль доступа
• Видимость
• Управление видимостью на уровне контейнера
объектов
• Опции Read, Query, Write
• Аутентификация
• Интеграция с hosting-средой
• ASP.NET, WCF, пользовательская аутентификация
• Перехватчики (interceptors)
• Выполняются перед GET/PUT/POST/DELETE
• Включают валидацию и пользовательские
политики безопасности на уровне строк данных
Перехватчики
• QueryInterceptor
• ChangeInterceptor
[QueryInterceptor("Orders")]
public Expression<Func<Order, bool>> OnQueryOrders() {
return o => o.Customer.ContactName ==
HttpContext.Current.User.Identity.Name;
}
[ChangeInterceptor("Products")]
public void OnChangeProducts(Product product,
UpdateOperations operations) {
if (operations == UpdateOperations.Delete) {
throw new DataServiceException(400,
"Products cannot be deleted");
}
}
Конкурентный доступ
• Optimistic concurrency
• Интеграция с существующей
HTTP инфраструктурой
GET /Customers(1)
200, ETag:xx
PUT/Customers(1)
If-Match: xx
201, ETag:xx
OR
412, ETag:xx
Практика
Итоги
• Работа со связанными сущностями
• Модификация данных (GET, POST, PUT, MERGE,
DELETE)
• Конкурентный доступ
• Пакетная обработка
• Сервисные операции
• Различные источники данных
• Безопасность, ограничение видимости
• Перехватчики
• Различное представление данных
• Клиентские прокси (.NET, PHP, Java)
Все выше сказанное честно позаимствовано тут:
• MSDN Magazine
• Extending WCF with Custom Behaviors
(http://msdn.microsoft.com/en-us/magazine/cc163302.aspx)
• WCF Bindings In Depth (http://msdn.microsoft.com/en-
us/magazine/cc163394.aspx)
• TechDays.ru
• DotNetCurry.com
• DevCurry.com
• Службы WCF Data Services
• http://msdn.microsoft.com/ru-ru/library/cc668792.aspx
Спасибо за внимание!

More Related Content

Viewers also liked

CRM Evolutiion BPMonline
CRM Evolutiion BPMonline CRM Evolutiion BPMonline
CRM Evolutiion BPMonline Andrey Dovgan
 
Bp monline boostsalesperfomance
Bp monline boostsalesperfomanceBp monline boostsalesperfomance
Bp monline boostsalesperfomanceAndrey Dovgan
 
Удобный интернет магазин
Удобный интернет магазинУдобный интернет магазин
Удобный интернет магазинOleg Karapuzov
 
BPMonline CRM on Mobile: escape from office
BPMonline CRM on Mobile: escape from officeBPMonline CRM on Mobile: escape from office
BPMonline CRM on Mobile: escape from officeAndrey Dovgan
 
Слава Панкратов - Личная эффективность для менеджеров проектов
Слава Панкратов - Личная эффективность для менеджеров проектовСлава Панкратов - Личная эффективность для менеджеров проектов
Слава Панкратов - Личная эффективность для менеджеров проектовLuxoft Education Center
 
Bp monline boostsalesperfomance
Bp monline boostsalesperfomanceBp monline boostsalesperfomance
Bp monline boostsalesperfomanceAndrey Dovgan
 
G управление лидами
G управление лидамиG управление лидами
G управление лидамиAndrey Dovgan
 
BPMonline CRM v 7.0
BPMonline CRM v 7.0 BPMonline CRM v 7.0
BPMonline CRM v 7.0 Andrey Dovgan
 
Bp monline on mobile
Bp monline on mobileBp monline on mobile
Bp monline on mobileAndrey Dovgan
 
Как разработать и внедрить бизнес-процесс продаж
Как разработать и внедрить бизнес-процесс продажКак разработать и внедрить бизнес-процесс продаж
Как разработать и внедрить бизнес-процесс продажAndrey Dovgan
 
bpmonline crm basic
bpmonline crm basic bpmonline crm basic
bpmonline crm basic Andrey Dovgan
 
Дмитрий Башакин: "Командообразование для тим лидов" (3-часовая версия курса T...
Дмитрий Башакин: "Командообразование для тим лидов" (3-часовая версия курса T...Дмитрий Башакин: "Командообразование для тим лидов" (3-часовая версия курса T...
Дмитрий Башакин: "Командообразование для тим лидов" (3-часовая версия курса T...Luxoft Education Center
 
CodeFest 2013 Maxim Dorofeev Part II
CodeFest 2013 Maxim Dorofeev Part IICodeFest 2013 Maxim Dorofeev Part II
CodeFest 2013 Maxim Dorofeev Part IIMaxim Dorofeev
 

Viewers also liked (20)

CRM Evolutiion BPMonline
CRM Evolutiion BPMonline CRM Evolutiion BPMonline
CRM Evolutiion BPMonline
 
Bp monline boostsalesperfomance
Bp monline boostsalesperfomanceBp monline boostsalesperfomance
Bp monline boostsalesperfomance
 
Удобный интернет магазин
Удобный интернет магазинУдобный интернет магазин
Удобный интернет магазин
 
BPMonline CRM on Mobile: escape from office
BPMonline CRM on Mobile: escape from officeBPMonline CRM on Mobile: escape from office
BPMonline CRM on Mobile: escape from office
 
Слава Панкратов - Личная эффективность для менеджеров проектов
Слава Панкратов - Личная эффективность для менеджеров проектовСлава Панкратов - Личная эффективность для менеджеров проектов
Слава Панкратов - Личная эффективность для менеджеров проектов
 
Gramma
GrammaGramma
Gramma
 
Bp monline boostsalesperfomance
Bp monline boostsalesperfomanceBp monline boostsalesperfomance
Bp monline boostsalesperfomance
 
G управление лидами
G управление лидамиG управление лидами
G управление лидами
 
Binder1
Binder1Binder1
Binder1
 
WCF Part 1
WCF Part 1WCF Part 1
WCF Part 1
 
Sales Acceleration
Sales Acceleration Sales Acceleration
Sales Acceleration
 
Axiline
AxilineAxiline
Axiline
 
BPMonline CRM v 7.0
BPMonline CRM v 7.0 BPMonline CRM v 7.0
BPMonline CRM v 7.0
 
Bp monline on mobile
Bp monline on mobileBp monline on mobile
Bp monline on mobile
 
Как разработать и внедрить бизнес-процесс продаж
Как разработать и внедрить бизнес-процесс продажКак разработать и внедрить бизнес-процесс продаж
Как разработать и внедрить бизнес-процесс продаж
 
bpmonline crm basic
bpmonline crm basic bpmonline crm basic
bpmonline crm basic
 
SPM Conf 2012 Part II
SPM Conf 2012 Part IISPM Conf 2012 Part II
SPM Conf 2012 Part II
 
Дмитрий Башакин: "Командообразование для тим лидов" (3-часовая версия курса T...
Дмитрий Башакин: "Командообразование для тим лидов" (3-часовая версия курса T...Дмитрий Башакин: "Командообразование для тим лидов" (3-часовая версия курса T...
Дмитрий Башакин: "Командообразование для тим лидов" (3-часовая версия курса T...
 
Crm
CrmCrm
Crm
 
CodeFest 2013 Maxim Dorofeev Part II
CodeFest 2013 Maxim Dorofeev Part IICodeFest 2013 Maxim Dorofeev Part II
CodeFest 2013 Maxim Dorofeev Part II
 

Similar to Wcf Part 2

Windows communication foundation 4
Windows communication foundation 4Windows communication foundation 4
Windows communication foundation 4GetDev.NET
 
6 создание распределенных приложений по технологии remoting
6 создание распределенных приложений по технологии remoting6 создание распределенных приложений по технологии remoting
6 создание распределенных приложений по технологии remotingKewpaN
 
Автоматизация тестирования WCF сервисов
Автоматизация тестирования WCF сервисовАвтоматизация тестирования WCF сервисов
Автоматизация тестирования WCF сервисовSQALab
 
Реализация REST и SOAP сервисов с помощью WCF
Реализация REST и SOAP сервисов с помощью WCFРеализация REST и SOAP сервисов с помощью WCF
Реализация REST и SOAP сервисов с помощью WCFPavel Tsukanov
 
Введение в Windows Communication Foundation
Введение в Windows Communication FoundationВведение в Windows Communication Foundation
Введение в Windows Communication Foundationakrakovetsky
 
C# Web. Занятие 03.
C# Web. Занятие 03.C# Web. Занятие 03.
C# Web. Занятие 03.Igor Shkulipa
 
Windows Azure Service Bus
Windows Azure Service BusWindows Azure Service Bus
Windows Azure Service BusPavel Revenkov
 
МАИ, Сети ЭВМ, Лекция №4
МАИ, Сети ЭВМ, Лекция №4МАИ, Сети ЭВМ, Лекция №4
МАИ, Сети ЭВМ, Лекция №4Dima Dzuba
 
Контроль и управление доступом к корпоративным ресурсам предприятия
Контроль и управление доступом к корпоративным ресурсам предприятияКонтроль и управление доступом к корпоративным ресурсам предприятия
Контроль и управление доступом к корпоративным ресурсам предприятияVERNA
 
Семь тысяч Rps, один go
Семь тысяч Rps, один goСемь тысяч Rps, один go
Семь тысяч Rps, один goBadoo Development
 
Новые перспективы Cisco ASR 9000 в роли BNG
Новые перспективы Cisco ASR 9000 в роли BNGНовые перспективы Cisco ASR 9000 в роли BNG
Новые перспективы Cisco ASR 9000 в роли BNGCisco Russia
 
Чему мы научились, разрабатывая микросервисы / Вадим Мадисон (RuTube)
Чему мы научились, разрабатывая микросервисы / Вадим Мадисон (RuTube)Чему мы научились, разрабатывая микросервисы / Вадим Мадисон (RuTube)
Чему мы научились, разрабатывая микросервисы / Вадим Мадисон (RuTube)Ontico
 
Чему мы научились разрабатывая микросервисы?
Чему мы научились разрабатывая микросервисы?Чему мы научились разрабатывая микросервисы?
Чему мы научились разрабатывая микросервисы?Vadim Madison
 
Cloud APIs. Обзор API западных провайдеров и API Scalaxy (Нат Гаджибалаев)
Cloud APIs. Обзор API западных провайдеров и API Scalaxy (Нат Гаджибалаев)Cloud APIs. Обзор API западных провайдеров и API Scalaxy (Нат Гаджибалаев)
Cloud APIs. Обзор API западных провайдеров и API Scalaxy (Нат Гаджибалаев)Ontico
 
Node.js and C++ #foss-sea.org.ua
Node.js and C++ #foss-sea.org.uaNode.js and C++ #foss-sea.org.ua
Node.js and C++ #foss-sea.org.uaEugene Khvedchenya
 
Обзор Unified Contact Center Enterprise 10.5
Обзор Unified Contact Center Enterprise 10.5Обзор Unified Contact Center Enterprise 10.5
Обзор Unified Contact Center Enterprise 10.5Cisco Russia
 
03 web server_architecture_ru
03 web server_architecture_ru03 web server_architecture_ru
03 web server_architecture_rumcroitor
 

Similar to Wcf Part 2 (20)

Windows communication foundation 4
Windows communication foundation 4Windows communication foundation 4
Windows communication foundation 4
 
6 создание распределенных приложений по технологии remoting
6 создание распределенных приложений по технологии remoting6 создание распределенных приложений по технологии remoting
6 создание распределенных приложений по технологии remoting
 
Автоматизация тестирования WCF сервисов
Автоматизация тестирования WCF сервисовАвтоматизация тестирования WCF сервисов
Автоматизация тестирования WCF сервисов
 
Реализация REST и SOAP сервисов с помощью WCF
Реализация REST и SOAP сервисов с помощью WCFРеализация REST и SOAP сервисов с помощью WCF
Реализация REST и SOAP сервисов с помощью WCF
 
Введение в Windows Communication Foundation
Введение в Windows Communication FoundationВведение в Windows Communication Foundation
Введение в Windows Communication Foundation
 
C# Web. Занятие 03.
C# Web. Занятие 03.C# Web. Занятие 03.
C# Web. Занятие 03.
 
HTML5 WebSockets and WebWorkers
HTML5 WebSockets and WebWorkersHTML5 WebSockets and WebWorkers
HTML5 WebSockets and WebWorkers
 
Windows Azure Service Bus
Windows Azure Service BusWindows Azure Service Bus
Windows Azure Service Bus
 
МАИ, Сети ЭВМ, Лекция №4
МАИ, Сети ЭВМ, Лекция №4МАИ, Сети ЭВМ, Лекция №4
МАИ, Сети ЭВМ, Лекция №4
 
ASP.NET MVC 3
ASP.NET MVC 3ASP.NET MVC 3
ASP.NET MVC 3
 
Контроль и управление доступом к корпоративным ресурсам предприятия
Контроль и управление доступом к корпоративным ресурсам предприятияКонтроль и управление доступом к корпоративным ресурсам предприятия
Контроль и управление доступом к корпоративным ресурсам предприятия
 
Web лекция 1
Web   лекция 1Web   лекция 1
Web лекция 1
 
Семь тысяч Rps, один go
Семь тысяч Rps, один goСемь тысяч Rps, один go
Семь тысяч Rps, один go
 
Новые перспективы Cisco ASR 9000 в роли BNG
Новые перспективы Cisco ASR 9000 в роли BNGНовые перспективы Cisco ASR 9000 в роли BNG
Новые перспективы Cisco ASR 9000 в роли BNG
 
Чему мы научились, разрабатывая микросервисы / Вадим Мадисон (RuTube)
Чему мы научились, разрабатывая микросервисы / Вадим Мадисон (RuTube)Чему мы научились, разрабатывая микросервисы / Вадим Мадисон (RuTube)
Чему мы научились, разрабатывая микросервисы / Вадим Мадисон (RuTube)
 
Чему мы научились разрабатывая микросервисы?
Чему мы научились разрабатывая микросервисы?Чему мы научились разрабатывая микросервисы?
Чему мы научились разрабатывая микросервисы?
 
Cloud APIs. Обзор API западных провайдеров и API Scalaxy (Нат Гаджибалаев)
Cloud APIs. Обзор API западных провайдеров и API Scalaxy (Нат Гаджибалаев)Cloud APIs. Обзор API западных провайдеров и API Scalaxy (Нат Гаджибалаев)
Cloud APIs. Обзор API западных провайдеров и API Scalaxy (Нат Гаджибалаев)
 
Node.js and C++ #foss-sea.org.ua
Node.js and C++ #foss-sea.org.uaNode.js and C++ #foss-sea.org.ua
Node.js and C++ #foss-sea.org.ua
 
Обзор Unified Contact Center Enterprise 10.5
Обзор Unified Contact Center Enterprise 10.5Обзор Unified Contact Center Enterprise 10.5
Обзор Unified Contact Center Enterprise 10.5
 
03 web server_architecture_ru
03 web server_architecture_ru03 web server_architecture_ru
03 web server_architecture_ru
 

Wcf Part 2

  • 3. Address Binding Contract (ABC) Клиент Сервис СообщениеABC A B C Адрес (Где) Привязки (Как) Контракт (Что) Конечная точка (Endpoint)
  • 5. Выполнение (Hosting) Клиент Сервис СообщениеABC A B C A B C Metadata Bv Bv Bv Bv Proxy ServiceHost<T>() Hosting Environments WAS IIS .exe Windows Service DllHost
  • 6. Типы контрактов Контракт (Что) • Описывает операции, выполняемые сервисом • CLR тип соответствует WSDL Service • Структура данных • CLR тип соответствует XSDData • Структура сообщений • CLR тип соответствует SOAP сообщению Message
  • 8. Поведение Поведение предназначено для модификации и расширения функциональности сервиса или клиента Поведение (Behavior) [ServiceBehavior( InstanceContextMode = InstanceContextMode.Single, IncludeExceptionDetailInFaults = true)] public class Service : IService { [OperationBehavior( ReleaseInstanceMode = ReleaseInstanceMode.AfterCall)] public DateTime GetCurrentDate() { return DateTime.Now; }
  • 9. SingleMultiplePerSessionSingle Instancing & Concurrency Service InstanceContextMode ConcurrencyMode PerSession PerCall Single Single Reentrant Multiple Поведение (Behavior)
  • 11. Итоги • WCF обобщает все предыдущие технологии меж процессорного взаимодействия • Транспорт: HTTP, TCP, NamedPipes, MSMQ, Custom • Кодировка: Text, Binary, MTOM, Custom • Поддерживаются сессии, гарантия доставки, шифрование, транзакции, …., Custom • Взаимодействие с сервером прозрачно для клиента • Контракт говорит – Что • Привязка говорит – Как • Адрес говорит – Где • Поведение молча манипулирует сервисом 
  • 13. Безопасность • Конфиденциальность (confidentiality) • Целостность (integrity) • Безопасность: o на уровне сообщения o на уровне транспорта • Аутентификация: o Username o Сертификаты o Windows o SAML токены
  • 14. Режимы безопасности • отсутствует (None) • на уровне сообщения (Message) • на транспортном уровне (Transport) • смешанный (TransportWithMessageCredential) • двухуровневый (Both) • TransportCredentialOnly (basicHttpBinding only) клиент сервис клиент сервис0523422E8A8 клиент сервис
  • 15. Шифрование транспорта Производительность Аппаратное шифрование Потоковая передача данных Point-to-point безопасность клиент сервис1 сервис2 Шифрование сообщение End-to-end безопасность Независимость от транспортного уровня Частичное шифрование или подпись сообщения ProtectionLevel атрибут [None | Sign | EncryptAndSign] Более ресурсоемко чем шифрование транспорта клиент сервис1 сервис20523422E8A8 0523422E8A8
  • 16. Безопасность и привязки Binding None Transport Message Mixed Both basicHttpBinding + + + + netTCPBinding + + + + netPeerTCPBinding + + + + netNamedPipeBinding + + wsHttpBinding + + + + wsFederationHttpBinding + + wsDualHttpBinding + + netMsmqBinding + + + + - доступно - по умолчанию++
  • 18. Сценарий: Публичный WCF-сервис userNamePasswordValidationMode [Windows | Custom | Membership] Username Windows X509 сертификат SSL сертификат
  • 19. Сценарий: B-2-B WCF-сервис заявки X509 сертификат X509 сертификат STS
  • 20. Сценарий: Корпоративный WCF-сервис • Бинарное сжатие • Имперсонация/делегирование • Шифрование билетом Kerberos Windows Windows контроллер домена
  • 21. Итоги • Безопасность по умолчанию включена • Безопасность на уровне транспорта и SOAP сообщения • Интероперабельность • WS-Security • SAML токены • Поддержка большинства стандартных сценариев • Расширяемость и гибкость
  • 23. WCF Клиент Сервис Proxy Dispatcher Contract Channel stack Transactions Reliability Security Encoder Transport Channel stack Transactions Reliability Security Encoder Transport Address Binding
  • 24. Расширяемость прокси-клиента Метод 1 Метод 2 ClientOperation ClientOperation ClientRuntime … Encoder Transport ОбъектыОбъекты Сообщение 1 2 3 Проверка параметров 1 Формирование сообщения (сериализация) 2 Проверка сообщения 3 Channel stack
  • 25. Расширяемость диспетчера Операция 1 Операция 2 DispatchOperation DispatchOperation DispatchRuntime … Encoder Transport 5 3 2 Channel stack 1 4 1 Проверка сообщения 2 Выбор операции Формирование объекта (десериализация) 3 4 Вызов операции 5 Проверка параметров ОбъектыОбъекты Сообщение
  • 26. Интерфейсы расширений Этап Интерфейс перехватчика Описание Проверка параметров IParameterInspector Используется до и после вызова для проверки и изменения значений параметров Форматирование сообщений IDispatchMessageFormatter IClientFormatter Используется для сериализации и десериализации Проверка сообщений IDispatchMessageInspector IClientMessageInspector Используется до отправки и после получения для проверки и замены содержимого сообщений Выбор операций IDispatchOperationSelector IClientOperationSelector Используется для выбора вызываемой операции для определенного сообщения Вызов операции IOperationInvoker Используется для вызова операции Клиент Сервис Клиент Сервис Клиент Сервис Клиент Сервис Сервис
  • 27. Интерфейсы расширений • IInstanceProvider  GetInstance(InstanceContext);  ReleaseInstance(InstanceContext, Instance); • IErrorHandler • HandleError(Exception) : bool • ProvideFault(Exception, MessageVersion, ref Message)
  • 28. Поведение • Это особый тип класса, расширяющий поведение серверной или клиентской среды выполнения • Поведения применяются к классам ServiceHost на сервере и ChannelFactory на клиенте • 4 типа пользовательских поведений:  Сервис (IServiceBehavior)  Конечная точка (IEndpointBehavior)  Контракт (IContractBehavior)  Операция (IOperationBehavior) • IBehavior • Validate • AddBindingParameters • ApplyDispatchBehavior • ApplyClientBehavior
  • 29. Уровни влияния поведений Контекст Интерфейс Влияние Service Endpoint Contract Operation Service IServiceBehavior ✗ ✗ ✗ ✗ Endpoint IEndpointBehavior ✗ ✗ ✗ Contract IContractBehavior ✗ ✗ Operation IOperationBehavior ✗
  • 32. WCF 4.0 • WCF • Activation Service • Routing Service • WS-Discovery • Standard Endpoints • HTTP Decompression on Client (Gzip) • WCF REST • Caching • Auto select format
  • 35. Сделаем сервис обнажаемым • Программная реализация: • Либо в конфиге: <services> <service name = "MyService"> <endpoint kind="udpDiscoveryEndpoint" /> </service> </services> <behaviors> <serviceBehaviors> <behavior> <serviceDiscovery/> </behavior> </serviceBehaviors> </behaviors> ServiceHost host = new ServiceHost(...); host.AddServiceEndpoint(new UdpDiscoveryEndpoint()); var discovery = new ServiceDiscoveryBehavior(); host.Description.Behaviors.Add(discovery); host.Open(); kind • UdpDiscoveryEndpoint • UpdAnnouncementEndpoint • DynamicEndpoint
  • 36. Давайте найдем сервис var discoveryClient = new DiscoveryClient(new UdpDiscoveryEndpoint()); FindCriteria criteria = new FindCriteria(typeof(IMyContract)); criteria.MaxResults = 1; FindResponse discovered = discoveryClient.Find(criteria); discoveryClient.Close(); EndpointAddress address = discovered.Endpoints[0].Address; Binding binding = new NetTcpBinding(); var factory = new ChannelFactory<IMyContract>(binding, address); IMyContract proxy = factory.CreateChannel() proxy.MyMethod(); ((ICommunicationObject)proxy).Close();
  • 40. prevContactIndex++; return Contacts[prevContactIndex]; SOAP – это выполнение операции SOAP Service POST /ServiceAccess/MyService1.svc Host: www.site.com SOAPAction: GetNextContact … <soap:Envelope xmlns:soap= … … </soap:Envelope> SOAP Client Contact Data
  • 41. return GetContact(2); REST – это запрос ресурса REST Service GET site.com/MyService1.svc/Contact(2) REST Client Contact Data
  • 42. Принципы REST • Пользователь взаимодействуют с ресурсами, которыми может быть всё, что можно поименовать • Каждый ресурс имеет свой уникальный идентификатор – URI • Взаимодействие с ресурсами происходит по средствам HTTP (команды GET, POST, PUT и DELETE) • Ресурсы описывают себя сами • Content-Type, Content-Length, … • В ресурсах могут содержатся ссылки на другие ресурсы
  • 43. Ограничения REST • Stateless – отсутствие состояния у сервера. Вся информация, необходимая для обработки запроса ресурса, содержится в самом запросе • Idempotent – повторное действие над объектом не изменяет его • Side Effects – запрашивая значение объекта по GET не должно происходить изменение этого или другого объекта • HTTP only
  • 44. Интернет магазин Клиенты Клиент 1 Клиент 2 Счет 1 Счет 2 …… Клиент N Ресурс URI Клиенты mysite.com/Clients/ Клиент mysite.com/Clients/{Client} Счет mysite.com/Clients/{Client}/{account} …. …..
  • 45. WebGet WebInvoke • WebGet – связывает метод с HTTP GET запросом • WebInvoke – все остальные HTTP запросы (POST, PUT, …) • UriTemplate – шаблон URI для связывания метода с запросом
  • 47. OData Протокол доступа к данным основанный на REST архитектуре
  • 48. Адресация данных • Обращение к коллекции объектов • http://../Service.svc/Customers • Обращение к объекту по PK • http://../Service.svc/Customers(523) • Обращение к полю объекта • http://../Service.svc/Customers(523)/Name • Обращение к коллекции объектов с сортировкой • http://../Service.svc/Customers?$orderby=Name • Обращение к коллекции объектов с фильтрацией • http://../Service.svc/Customers?$filter=Created gt ’2008-01-01’ • Постарничный доступ • http://../Service.svc/Customers?$top=10&$skip=20
  • 49. Контроль доступа • Видимость • Управление видимостью на уровне контейнера объектов • Опции Read, Query, Write • Аутентификация • Интеграция с hosting-средой • ASP.NET, WCF, пользовательская аутентификация • Перехватчики (interceptors) • Выполняются перед GET/PUT/POST/DELETE • Включают валидацию и пользовательские политики безопасности на уровне строк данных
  • 50. Перехватчики • QueryInterceptor • ChangeInterceptor [QueryInterceptor("Orders")] public Expression<Func<Order, bool>> OnQueryOrders() { return o => o.Customer.ContactName == HttpContext.Current.User.Identity.Name; } [ChangeInterceptor("Products")] public void OnChangeProducts(Product product, UpdateOperations operations) { if (operations == UpdateOperations.Delete) { throw new DataServiceException(400, "Products cannot be deleted"); } }
  • 51. Конкурентный доступ • Optimistic concurrency • Интеграция с существующей HTTP инфраструктурой GET /Customers(1) 200, ETag:xx PUT/Customers(1) If-Match: xx 201, ETag:xx OR 412, ETag:xx
  • 53. Итоги • Работа со связанными сущностями • Модификация данных (GET, POST, PUT, MERGE, DELETE) • Конкурентный доступ • Пакетная обработка • Сервисные операции • Различные источники данных • Безопасность, ограничение видимости • Перехватчики • Различное представление данных • Клиентские прокси (.NET, PHP, Java)
  • 54. Все выше сказанное честно позаимствовано тут: • MSDN Magazine • Extending WCF with Custom Behaviors (http://msdn.microsoft.com/en-us/magazine/cc163302.aspx) • WCF Bindings In Depth (http://msdn.microsoft.com/en- us/magazine/cc163394.aspx) • TechDays.ru • DotNetCurry.com • DevCurry.com • Службы WCF Data Services • http://msdn.microsoft.com/ru-ru/library/cc668792.aspx Спасибо за внимание!

Editor's Notes

  1. None No security is provided; all information is passed in clear text. (по умолчанию для basicHttpBinding)Transport Mutual authentication and message protection are provided at the transport level.Message Mutual authentication and message protection are provided at the message level. (по умолчанию для wsHttpBinding)Both Mutual authentication and message protection are provided at both the transport and message levels. This is far more than is necessary for most scenarios.TransportWithMessageCredentialClient authentication is provided at the message level, and message protection and service authentication are provided at the transport level.TransportCredentialOnlyMutual authentication is provided at the transport level; no message protection is provided. This option is available only on basicHttpBinding.