wcf part 2
TRANSCRIPT
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 ServiceHostltTgt()Hosting Environments
WAS IIS exeWindowsService
DllHost
Типы контрактов Контракт
(Что)bull Описывает операции
выполняемые сервисом
bull CLR тип соответствует WSDLService
bull Структура данных
bull CLR тип соответствует XSDData
bull Структура сообщений
bull CLR тип соответствует SOAP сообщению
Message
Bin
din
g(К
ак
)
Address (Где)
Contract (Что)
Привязки
Просторы интернета
Привязки
(Как)
Поведение
Поведение предназначено для модификации и
расширения функциональности сервиса или клиента
Поведение
(Behavior)
[ServiceBehavior(InstanceContextMode =
InstanceContextModeSingleIncludeExceptionDetailInFaults = true)]
public class Service IService
[OperationBehavior(ReleaseInstanceMode =
ReleaseInstanceModeAfterCall)]public DateTime GetCurrentDate()
return DateTimeNow
SingleMultiplePerSessionSingle
Instancing amp Concurrency
Service
InstanceContextMode ConcurrencyMode
PerSession
PerCall
Single
Single
Reentrant
Multiple
Поведение
(Behavior)
Практика
Итоги
bull WCF обобщает все предыдущие технологии меж процессорного
взаимодействия
bull Транспорт HTTP TCP NamedPipes MSMQ Custom
bull Кодировка Text Binary MTOM Custom
bull Поддерживаются сессии гарантия доставки шифрование
транзакции hellip Custom
bull Взаимодействие с сервером прозрачно для клиента
bull Контракт говорит ndash Что
bull Привязка говорит ndash Как
bull Адрес говорит ndash Где
bull Поведение молча манипулирует сервисом
Безопасность
Безопасность
bull Конфиденциальность (confidentiality)
bull Целостность (integrity)
bull Безопасность
o на уровне сообщения
o на уровне транспорта
bull Аутентификация
o Username
o Сертификаты
o Windows
o SAML токены
Режимы безопасности
bull отсутствует (None)
bull на уровне сообщения (Message)
bull на транспортном уровне (Transport)
bull смешанный (TransportWithMessageCredential)
bull двухуровневый (Both)
bull 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-сервис
bull Бинарное сжатие
bull Имперсонацияделегирование
bull Шифрование билетом Kerberos
Windows
Windows
контроллер
домена
Итоги
bull Безопасность по умолчанию включена
bull Безопасность на уровне транспорта и SOAP
сообщения
bull Интероперабельность
bull WS-Security
bull SAML токены
bull Поддержка большинства стандартных сценариев
bull Расширяемость и гибкость
Расширяемость WCF
WCFКлиент Сервис
Proxy DispatcherContract
Channel stackTransactions
Reliability
Security
Encoder
Transport
Channel stackTransactions
Reliability
Security
Encoder
TransportAddress
Binding
Расширяемость прокси-клиента
Метод 1 Метод 2
ClientOperation ClientOperation
ClientRuntime
hellipEncoderTransport
ОбъектыОбъекты
Сообщение
1
2
3
Проверка
параметров1
Формирование
сообщения
(сериализация)2
Проверка
сообщения3
Channel stack
Расширяемость диспетчера
Операция 1 Операция 2
DispatchOperation DispatchOperation
DispatchRuntime
hellipEncoderTransport
5
3
2
Channel stack
1
4
1 Проверка
сообщения
2 Выбор операции
Формирование
объекта
(десериализация)
3
4
Вызов
операции5
Проверка
параметров
ОбъектыОбъекты
Сообщение
Интерфейсы расширений
Этап Интерфейс перехватчика Описание
Проверка
параметровIParameterInspector
Используется до и после вызова
для проверки и изменения
значений параметров
Форматирование
сообщений
IDispatchMessageFormatter
IClientFormatter
Используется для сериализации и
десериализации
Проверка
сообщений
IDispatchMessageInspector
IClientMessageInspector
Используется до отправки и после
получения для проверки и замены
содержимого сообщений
Выбор операцийIDispatchOperationSelector
IClientOperationSelector
Используется для выбора
вызываемой операции для
определенного сообщения
Вызов операции IOperationInvokerИспользуется для вызова
операции
Клиент Сервис
Клиент Сервис
Клиент Сервис
Клиент Сервис
Сервис
Интерфейсы расширений
bull IInstanceProvider GetInstance(InstanceContext)
ReleaseInstance(InstanceContext Instance)
bull IErrorHandlerbull HandleError(Exception) bool
bull ProvideFault(Exception MessageVersion ref Message)
Поведение
bull Это особый тип класса расширяющий поведение серверной или
клиентской среды выполнения
bull Поведения применяются к классам ServiceHost на сервере и
ChannelFactory на клиенте
bull 4 типа пользовательских поведений
Сервис (IServiceBehavior)
Конечная точка (IEndpointBehavior)
Контракт (IContractBehavior)
Операция (IOperationBehavior)
bull IBehavior
bull Validate
bull AddBindingParameters
bull ApplyDispatchBehavior
bull ApplyClientBehavior
Уровни влияния поведений
Контекст Интерфейс Влияние
Service Endpoint Contract Operation
Service IServiceBehavior
Endpoint IEndpointBehavior
Contract IContractBehavior
Operation IOperationBehavior
Практика
WCF 40 Whatrsquos new
WCF 40
bull WCF
bull Activation Service
bull Routing Service
bull WS-Discovery
bull Standard Endpoints
bull HTTP Decompression on Client (Gzip)
bull WCF REST
bull Caching
bull Auto select format
Обнаружение WCF
Клиент СервисСервис
Discovery
Request
Discovery
Endpoint
Discovery
Response
СервисСервис
Discovery
Endpoint
Discovery
Response
Discovery
Request
Discovery
Endpoint
Discovery
Response
Сервис
Оповещение ONOFF
Announcements
Endpoint
Сервис
HelloBye
СервисСервис
HelloBye
Discovery
Endpoint
Клиент
Сделаем сервис обнажаемымbull Программная реализация
bull Либо в конфигеltservicesgt
ltservice name = MyServicegtltendpoint kind=udpDiscoveryEndpoint gt
ltservicegtltservicesgtltbehaviorsgtltserviceBehaviorsgtltbehaviorgt
ltserviceDiscoverygtltbehaviorgt
ltserviceBehaviorsgtltbehaviorsgt
ServiceHost host = new ServiceHost()hostAddServiceEndpoint(new UdpDiscoveryEndpoint()) var discovery = new ServiceDiscoveryBehavior() hostDescriptionBehaviorsAdd(discovery)hostOpen()
kindbull UdpDiscoveryEndpoint
bull UpdAnnouncementEndpoint
bull DynamicEndpoint
Давайте найдем сервис
var discoveryClient =new DiscoveryClient(new UdpDiscoveryEndpoint())
FindCriteria criteria = new FindCriteria(typeof(IMyContract)) criteriaMaxResults = 1 FindResponse discovered = discoveryClientFind(criteria) discoveryClientClose()
EndpointAddress address = discoveredEndpoints[0]Address Binding binding = new NetTcpBinding() var factory = new ChannelFactoryltIMyContractgt(binding address)
IMyContract proxy = factoryCreateChannel()proxyMyMethod() ((ICommunicationObject)proxy)Close()
Практика
Publish-Subscribe Pattern
PublisherPubSub
Service
Publish
Announcements
Endpoint
Discovery
Endpoint
Subscriber
HelloBye
Subscriber
Discover
PubSub
Discovery
EndpointDiscover
Subscribers
SOAP vs REST
prevContactIndex++
return Contacts[prevContactIndex]
SOAP ndash это выполнение операции
SOAP
Service
POST ServiceAccessMyService1svc
Host wwwsitecom
SOAPAction GetNextContact
hellip
ltsoapEnvelope xmlnssoap= hellip
hellip
ltsoapEnvelopegt
SOAP
Client
Contact Data
return GetContact(2)
REST ndash это запрос ресурса
REST
Service
GET sitecomMyService1svcContact(2)
REST
Client
Contact Data
Принципы REST
bull Пользователь взаимодействуют с ресурсами которыми может
быть всё что можно поименовать
bull Каждый ресурс имеет свой уникальный идентификатор ndash URI
bull Взаимодействие с ресурсами происходит по средствам HTTP
(команды GET POST PUT и DELETE)
bull Ресурсы описывают себя сами
bull Content-Type Content-Length hellip
bull В ресурсах могут содержатся ссылки на другие ресурсы
Ограничения REST
bull Stateless ndash отсутствие состояния у сервера Вся информация
необходимая для обработки запроса ресурса содержится в
самом запросе
bull Idempotent ndash повторное действие над объектом не
изменяет его
bull Side Effects ndash запрашивая значение объекта по GET не должно
происходить изменение этого или другого объекта
bull HTTP only
Интернет магазин
Клиенты
Клиент 1
Клиент 2
Счет 1
Счет 2
helliphellip
Клиент N
Ресурс URI
Клиенты mysitecomClients
Клиент mysitecomClientsClient
Счет mysitecomClientsClientaccount
hellip hellip
WebGet WebInvoke
bull WebGet ndash связывает метод с HTTP GET запросом
bull WebInvoke ndash все остальные HTTP запросы (POST PUT hellip)
bull UriTemplate ndash шаблон URI для связывания метода с запросом
Практика
OData
Протокол доступа к данным
основанный на REST
архитектуре
Адресация данных
bull Обращение к коллекции объектов
bull httpServicesvcCustomers
bull Обращение к объекту по PK
bull httpServicesvcCustomers(523)
bull Обращение к полю объекта
bull httpServicesvcCustomers(523)Name
bull Обращение к коллекции объектов с сортировкой
bull httpServicesvcCustomers$orderby=Name
bull Обращение к коллекции объектов с фильтрацией
bull httpServicesvcCustomers$filter=Created gt rsquo2008-01-01rsquo
bull Постарничный доступ
bull httpServicesvcCustomers$top=10amp$skip=20
Контроль доступаbull Видимость
bull Управление видимостью на уровне контейнера
объектов
bull Опции Read Query Write
bull Аутентификация
bull Интеграция с hosting-средой
bull ASPNET WCF пользовательская аутентификация
bull Перехватчики (interceptors)
bull Выполняются перед GETPUTPOSTDELETE
bull Включают валидацию и пользовательские
политики безопасности на уровне строк данных
Перехватчики
bull QueryInterceptor
bull ChangeInterceptor
[QueryInterceptor(Orders)]public ExpressionltFuncltOrder boolgtgt OnQueryOrders()
return o =gt oCustomerContactName == HttpContextCurrentUserIdentityName
[ChangeInterceptor(Products)]public void OnChangeProducts(Product product
UpdateOperations operations) if (operations == UpdateOperationsDelete)
throw new DataServiceException(400 Products cannot be deleted)
Конкурентный доступ
bull Optimistic concurrency
bull Интеграция с существующей
HTTP инфраструктурой
GET Customers(1)
200 ETagxx
PUTCustomers(1)
If-Match xx
201 ETagxx
OR
412 ETagxx
Практика
Итогиbull Работа со связанными сущностями
bull Модификация данных (GET POST PUT MERGE
DELETE)
bull Конкурентный доступ
bull Пакетная обработка
bull Сервисные операции
bull Различные источники данных
bull Безопасность ограничение видимости
bull Перехватчики
bull Различное представление данных
bull Клиентские прокси (NET PHP Java)
Все выше сказанное честно позаимствовано тут
bull MSDN Magazine
bull Extending WCF with Custom Behaviors
(httpmsdnmicrosoftcomen-usmagazinecc163302aspx)
bull WCF Bindings In Depth (httpmsdnmicrosoftcomen-
usmagazinecc163394aspx)
bull TechDaysru
bull DotNetCurrycom
bull DevCurrycom
bull Службы WCF Data Services
bull httpmsdnmicrosoftcomru-rulibrarycc668792aspx
Спасибо за внимание
Что такое 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 ServiceHostltTgt()Hosting Environments
WAS IIS exeWindowsService
DllHost
Типы контрактов Контракт
(Что)bull Описывает операции
выполняемые сервисом
bull CLR тип соответствует WSDLService
bull Структура данных
bull CLR тип соответствует XSDData
bull Структура сообщений
bull CLR тип соответствует SOAP сообщению
Message
Bin
din
g(К
ак
)
Address (Где)
Contract (Что)
Привязки
Просторы интернета
Привязки
(Как)
Поведение
Поведение предназначено для модификации и
расширения функциональности сервиса или клиента
Поведение
(Behavior)
[ServiceBehavior(InstanceContextMode =
InstanceContextModeSingleIncludeExceptionDetailInFaults = true)]
public class Service IService
[OperationBehavior(ReleaseInstanceMode =
ReleaseInstanceModeAfterCall)]public DateTime GetCurrentDate()
return DateTimeNow
SingleMultiplePerSessionSingle
Instancing amp Concurrency
Service
InstanceContextMode ConcurrencyMode
PerSession
PerCall
Single
Single
Reentrant
Multiple
Поведение
(Behavior)
Практика
Итоги
bull WCF обобщает все предыдущие технологии меж процессорного
взаимодействия
bull Транспорт HTTP TCP NamedPipes MSMQ Custom
bull Кодировка Text Binary MTOM Custom
bull Поддерживаются сессии гарантия доставки шифрование
транзакции hellip Custom
bull Взаимодействие с сервером прозрачно для клиента
bull Контракт говорит ndash Что
bull Привязка говорит ndash Как
bull Адрес говорит ndash Где
bull Поведение молча манипулирует сервисом
Безопасность
Безопасность
bull Конфиденциальность (confidentiality)
bull Целостность (integrity)
bull Безопасность
o на уровне сообщения
o на уровне транспорта
bull Аутентификация
o Username
o Сертификаты
o Windows
o SAML токены
Режимы безопасности
bull отсутствует (None)
bull на уровне сообщения (Message)
bull на транспортном уровне (Transport)
bull смешанный (TransportWithMessageCredential)
bull двухуровневый (Both)
bull 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-сервис
bull Бинарное сжатие
bull Имперсонацияделегирование
bull Шифрование билетом Kerberos
Windows
Windows
контроллер
домена
Итоги
bull Безопасность по умолчанию включена
bull Безопасность на уровне транспорта и SOAP
сообщения
bull Интероперабельность
bull WS-Security
bull SAML токены
bull Поддержка большинства стандартных сценариев
bull Расширяемость и гибкость
Расширяемость WCF
WCFКлиент Сервис
Proxy DispatcherContract
Channel stackTransactions
Reliability
Security
Encoder
Transport
Channel stackTransactions
Reliability
Security
Encoder
TransportAddress
Binding
Расширяемость прокси-клиента
Метод 1 Метод 2
ClientOperation ClientOperation
ClientRuntime
hellipEncoderTransport
ОбъектыОбъекты
Сообщение
1
2
3
Проверка
параметров1
Формирование
сообщения
(сериализация)2
Проверка
сообщения3
Channel stack
Расширяемость диспетчера
Операция 1 Операция 2
DispatchOperation DispatchOperation
DispatchRuntime
hellipEncoderTransport
5
3
2
Channel stack
1
4
1 Проверка
сообщения
2 Выбор операции
Формирование
объекта
(десериализация)
3
4
Вызов
операции5
Проверка
параметров
ОбъектыОбъекты
Сообщение
Интерфейсы расширений
Этап Интерфейс перехватчика Описание
Проверка
параметровIParameterInspector
Используется до и после вызова
для проверки и изменения
значений параметров
Форматирование
сообщений
IDispatchMessageFormatter
IClientFormatter
Используется для сериализации и
десериализации
Проверка
сообщений
IDispatchMessageInspector
IClientMessageInspector
Используется до отправки и после
получения для проверки и замены
содержимого сообщений
Выбор операцийIDispatchOperationSelector
IClientOperationSelector
Используется для выбора
вызываемой операции для
определенного сообщения
Вызов операции IOperationInvokerИспользуется для вызова
операции
Клиент Сервис
Клиент Сервис
Клиент Сервис
Клиент Сервис
Сервис
Интерфейсы расширений
bull IInstanceProvider GetInstance(InstanceContext)
ReleaseInstance(InstanceContext Instance)
bull IErrorHandlerbull HandleError(Exception) bool
bull ProvideFault(Exception MessageVersion ref Message)
Поведение
bull Это особый тип класса расширяющий поведение серверной или
клиентской среды выполнения
bull Поведения применяются к классам ServiceHost на сервере и
ChannelFactory на клиенте
bull 4 типа пользовательских поведений
Сервис (IServiceBehavior)
Конечная точка (IEndpointBehavior)
Контракт (IContractBehavior)
Операция (IOperationBehavior)
bull IBehavior
bull Validate
bull AddBindingParameters
bull ApplyDispatchBehavior
bull ApplyClientBehavior
Уровни влияния поведений
Контекст Интерфейс Влияние
Service Endpoint Contract Operation
Service IServiceBehavior
Endpoint IEndpointBehavior
Contract IContractBehavior
Operation IOperationBehavior
Практика
WCF 40 Whatrsquos new
WCF 40
bull WCF
bull Activation Service
bull Routing Service
bull WS-Discovery
bull Standard Endpoints
bull HTTP Decompression on Client (Gzip)
bull WCF REST
bull Caching
bull Auto select format
Обнаружение WCF
Клиент СервисСервис
Discovery
Request
Discovery
Endpoint
Discovery
Response
СервисСервис
Discovery
Endpoint
Discovery
Response
Discovery
Request
Discovery
Endpoint
Discovery
Response
Сервис
Оповещение ONOFF
Announcements
Endpoint
Сервис
HelloBye
СервисСервис
HelloBye
Discovery
Endpoint
Клиент
Сделаем сервис обнажаемымbull Программная реализация
bull Либо в конфигеltservicesgt
ltservice name = MyServicegtltendpoint kind=udpDiscoveryEndpoint gt
ltservicegtltservicesgtltbehaviorsgtltserviceBehaviorsgtltbehaviorgt
ltserviceDiscoverygtltbehaviorgt
ltserviceBehaviorsgtltbehaviorsgt
ServiceHost host = new ServiceHost()hostAddServiceEndpoint(new UdpDiscoveryEndpoint()) var discovery = new ServiceDiscoveryBehavior() hostDescriptionBehaviorsAdd(discovery)hostOpen()
kindbull UdpDiscoveryEndpoint
bull UpdAnnouncementEndpoint
bull DynamicEndpoint
Давайте найдем сервис
var discoveryClient =new DiscoveryClient(new UdpDiscoveryEndpoint())
FindCriteria criteria = new FindCriteria(typeof(IMyContract)) criteriaMaxResults = 1 FindResponse discovered = discoveryClientFind(criteria) discoveryClientClose()
EndpointAddress address = discoveredEndpoints[0]Address Binding binding = new NetTcpBinding() var factory = new ChannelFactoryltIMyContractgt(binding address)
IMyContract proxy = factoryCreateChannel()proxyMyMethod() ((ICommunicationObject)proxy)Close()
Практика
Publish-Subscribe Pattern
PublisherPubSub
Service
Publish
Announcements
Endpoint
Discovery
Endpoint
Subscriber
HelloBye
Subscriber
Discover
PubSub
Discovery
EndpointDiscover
Subscribers
SOAP vs REST
prevContactIndex++
return Contacts[prevContactIndex]
SOAP ndash это выполнение операции
SOAP
Service
POST ServiceAccessMyService1svc
Host wwwsitecom
SOAPAction GetNextContact
hellip
ltsoapEnvelope xmlnssoap= hellip
hellip
ltsoapEnvelopegt
SOAP
Client
Contact Data
return GetContact(2)
REST ndash это запрос ресурса
REST
Service
GET sitecomMyService1svcContact(2)
REST
Client
Contact Data
Принципы REST
bull Пользователь взаимодействуют с ресурсами которыми может
быть всё что можно поименовать
bull Каждый ресурс имеет свой уникальный идентификатор ndash URI
bull Взаимодействие с ресурсами происходит по средствам HTTP
(команды GET POST PUT и DELETE)
bull Ресурсы описывают себя сами
bull Content-Type Content-Length hellip
bull В ресурсах могут содержатся ссылки на другие ресурсы
Ограничения REST
bull Stateless ndash отсутствие состояния у сервера Вся информация
необходимая для обработки запроса ресурса содержится в
самом запросе
bull Idempotent ndash повторное действие над объектом не
изменяет его
bull Side Effects ndash запрашивая значение объекта по GET не должно
происходить изменение этого или другого объекта
bull HTTP only
Интернет магазин
Клиенты
Клиент 1
Клиент 2
Счет 1
Счет 2
helliphellip
Клиент N
Ресурс URI
Клиенты mysitecomClients
Клиент mysitecomClientsClient
Счет mysitecomClientsClientaccount
hellip hellip
WebGet WebInvoke
bull WebGet ndash связывает метод с HTTP GET запросом
bull WebInvoke ndash все остальные HTTP запросы (POST PUT hellip)
bull UriTemplate ndash шаблон URI для связывания метода с запросом
Практика
OData
Протокол доступа к данным
основанный на REST
архитектуре
Адресация данных
bull Обращение к коллекции объектов
bull httpServicesvcCustomers
bull Обращение к объекту по PK
bull httpServicesvcCustomers(523)
bull Обращение к полю объекта
bull httpServicesvcCustomers(523)Name
bull Обращение к коллекции объектов с сортировкой
bull httpServicesvcCustomers$orderby=Name
bull Обращение к коллекции объектов с фильтрацией
bull httpServicesvcCustomers$filter=Created gt rsquo2008-01-01rsquo
bull Постарничный доступ
bull httpServicesvcCustomers$top=10amp$skip=20
Контроль доступаbull Видимость
bull Управление видимостью на уровне контейнера
объектов
bull Опции Read Query Write
bull Аутентификация
bull Интеграция с hosting-средой
bull ASPNET WCF пользовательская аутентификация
bull Перехватчики (interceptors)
bull Выполняются перед GETPUTPOSTDELETE
bull Включают валидацию и пользовательские
политики безопасности на уровне строк данных
Перехватчики
bull QueryInterceptor
bull ChangeInterceptor
[QueryInterceptor(Orders)]public ExpressionltFuncltOrder boolgtgt OnQueryOrders()
return o =gt oCustomerContactName == HttpContextCurrentUserIdentityName
[ChangeInterceptor(Products)]public void OnChangeProducts(Product product
UpdateOperations operations) if (operations == UpdateOperationsDelete)
throw new DataServiceException(400 Products cannot be deleted)
Конкурентный доступ
bull Optimistic concurrency
bull Интеграция с существующей
HTTP инфраструктурой
GET Customers(1)
200 ETagxx
PUTCustomers(1)
If-Match xx
201 ETagxx
OR
412 ETagxx
Практика
Итогиbull Работа со связанными сущностями
bull Модификация данных (GET POST PUT MERGE
DELETE)
bull Конкурентный доступ
bull Пакетная обработка
bull Сервисные операции
bull Различные источники данных
bull Безопасность ограничение видимости
bull Перехватчики
bull Различное представление данных
bull Клиентские прокси (NET PHP Java)
Все выше сказанное честно позаимствовано тут
bull MSDN Magazine
bull Extending WCF with Custom Behaviors
(httpmsdnmicrosoftcomen-usmagazinecc163302aspx)
bull WCF Bindings In Depth (httpmsdnmicrosoftcomen-
usmagazinecc163394aspx)
bull TechDaysru
bull DotNetCurrycom
bull DevCurrycom
bull Службы WCF Data Services
bull httpmsdnmicrosoftcomru-rulibrarycc668792aspx
Спасибо за внимание
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 ServiceHostltTgt()Hosting Environments
WAS IIS exeWindowsService
DllHost
Типы контрактов Контракт
(Что)bull Описывает операции
выполняемые сервисом
bull CLR тип соответствует WSDLService
bull Структура данных
bull CLR тип соответствует XSDData
bull Структура сообщений
bull CLR тип соответствует SOAP сообщению
Message
Bin
din
g(К
ак
)
Address (Где)
Contract (Что)
Привязки
Просторы интернета
Привязки
(Как)
Поведение
Поведение предназначено для модификации и
расширения функциональности сервиса или клиента
Поведение
(Behavior)
[ServiceBehavior(InstanceContextMode =
InstanceContextModeSingleIncludeExceptionDetailInFaults = true)]
public class Service IService
[OperationBehavior(ReleaseInstanceMode =
ReleaseInstanceModeAfterCall)]public DateTime GetCurrentDate()
return DateTimeNow
SingleMultiplePerSessionSingle
Instancing amp Concurrency
Service
InstanceContextMode ConcurrencyMode
PerSession
PerCall
Single
Single
Reentrant
Multiple
Поведение
(Behavior)
Практика
Итоги
bull WCF обобщает все предыдущие технологии меж процессорного
взаимодействия
bull Транспорт HTTP TCP NamedPipes MSMQ Custom
bull Кодировка Text Binary MTOM Custom
bull Поддерживаются сессии гарантия доставки шифрование
транзакции hellip Custom
bull Взаимодействие с сервером прозрачно для клиента
bull Контракт говорит ndash Что
bull Привязка говорит ndash Как
bull Адрес говорит ndash Где
bull Поведение молча манипулирует сервисом
Безопасность
Безопасность
bull Конфиденциальность (confidentiality)
bull Целостность (integrity)
bull Безопасность
o на уровне сообщения
o на уровне транспорта
bull Аутентификация
o Username
o Сертификаты
o Windows
o SAML токены
Режимы безопасности
bull отсутствует (None)
bull на уровне сообщения (Message)
bull на транспортном уровне (Transport)
bull смешанный (TransportWithMessageCredential)
bull двухуровневый (Both)
bull 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-сервис
bull Бинарное сжатие
bull Имперсонацияделегирование
bull Шифрование билетом Kerberos
Windows
Windows
контроллер
домена
Итоги
bull Безопасность по умолчанию включена
bull Безопасность на уровне транспорта и SOAP
сообщения
bull Интероперабельность
bull WS-Security
bull SAML токены
bull Поддержка большинства стандартных сценариев
bull Расширяемость и гибкость
Расширяемость WCF
WCFКлиент Сервис
Proxy DispatcherContract
Channel stackTransactions
Reliability
Security
Encoder
Transport
Channel stackTransactions
Reliability
Security
Encoder
TransportAddress
Binding
Расширяемость прокси-клиента
Метод 1 Метод 2
ClientOperation ClientOperation
ClientRuntime
hellipEncoderTransport
ОбъектыОбъекты
Сообщение
1
2
3
Проверка
параметров1
Формирование
сообщения
(сериализация)2
Проверка
сообщения3
Channel stack
Расширяемость диспетчера
Операция 1 Операция 2
DispatchOperation DispatchOperation
DispatchRuntime
hellipEncoderTransport
5
3
2
Channel stack
1
4
1 Проверка
сообщения
2 Выбор операции
Формирование
объекта
(десериализация)
3
4
Вызов
операции5
Проверка
параметров
ОбъектыОбъекты
Сообщение
Интерфейсы расширений
Этап Интерфейс перехватчика Описание
Проверка
параметровIParameterInspector
Используется до и после вызова
для проверки и изменения
значений параметров
Форматирование
сообщений
IDispatchMessageFormatter
IClientFormatter
Используется для сериализации и
десериализации
Проверка
сообщений
IDispatchMessageInspector
IClientMessageInspector
Используется до отправки и после
получения для проверки и замены
содержимого сообщений
Выбор операцийIDispatchOperationSelector
IClientOperationSelector
Используется для выбора
вызываемой операции для
определенного сообщения
Вызов операции IOperationInvokerИспользуется для вызова
операции
Клиент Сервис
Клиент Сервис
Клиент Сервис
Клиент Сервис
Сервис
Интерфейсы расширений
bull IInstanceProvider GetInstance(InstanceContext)
ReleaseInstance(InstanceContext Instance)
bull IErrorHandlerbull HandleError(Exception) bool
bull ProvideFault(Exception MessageVersion ref Message)
Поведение
bull Это особый тип класса расширяющий поведение серверной или
клиентской среды выполнения
bull Поведения применяются к классам ServiceHost на сервере и
ChannelFactory на клиенте
bull 4 типа пользовательских поведений
Сервис (IServiceBehavior)
Конечная точка (IEndpointBehavior)
Контракт (IContractBehavior)
Операция (IOperationBehavior)
bull IBehavior
bull Validate
bull AddBindingParameters
bull ApplyDispatchBehavior
bull ApplyClientBehavior
Уровни влияния поведений
Контекст Интерфейс Влияние
Service Endpoint Contract Operation
Service IServiceBehavior
Endpoint IEndpointBehavior
Contract IContractBehavior
Operation IOperationBehavior
Практика
WCF 40 Whatrsquos new
WCF 40
bull WCF
bull Activation Service
bull Routing Service
bull WS-Discovery
bull Standard Endpoints
bull HTTP Decompression on Client (Gzip)
bull WCF REST
bull Caching
bull Auto select format
Обнаружение WCF
Клиент СервисСервис
Discovery
Request
Discovery
Endpoint
Discovery
Response
СервисСервис
Discovery
Endpoint
Discovery
Response
Discovery
Request
Discovery
Endpoint
Discovery
Response
Сервис
Оповещение ONOFF
Announcements
Endpoint
Сервис
HelloBye
СервисСервис
HelloBye
Discovery
Endpoint
Клиент
Сделаем сервис обнажаемымbull Программная реализация
bull Либо в конфигеltservicesgt
ltservice name = MyServicegtltendpoint kind=udpDiscoveryEndpoint gt
ltservicegtltservicesgtltbehaviorsgtltserviceBehaviorsgtltbehaviorgt
ltserviceDiscoverygtltbehaviorgt
ltserviceBehaviorsgtltbehaviorsgt
ServiceHost host = new ServiceHost()hostAddServiceEndpoint(new UdpDiscoveryEndpoint()) var discovery = new ServiceDiscoveryBehavior() hostDescriptionBehaviorsAdd(discovery)hostOpen()
kindbull UdpDiscoveryEndpoint
bull UpdAnnouncementEndpoint
bull DynamicEndpoint
Давайте найдем сервис
var discoveryClient =new DiscoveryClient(new UdpDiscoveryEndpoint())
FindCriteria criteria = new FindCriteria(typeof(IMyContract)) criteriaMaxResults = 1 FindResponse discovered = discoveryClientFind(criteria) discoveryClientClose()
EndpointAddress address = discoveredEndpoints[0]Address Binding binding = new NetTcpBinding() var factory = new ChannelFactoryltIMyContractgt(binding address)
IMyContract proxy = factoryCreateChannel()proxyMyMethod() ((ICommunicationObject)proxy)Close()
Практика
Publish-Subscribe Pattern
PublisherPubSub
Service
Publish
Announcements
Endpoint
Discovery
Endpoint
Subscriber
HelloBye
Subscriber
Discover
PubSub
Discovery
EndpointDiscover
Subscribers
SOAP vs REST
prevContactIndex++
return Contacts[prevContactIndex]
SOAP ndash это выполнение операции
SOAP
Service
POST ServiceAccessMyService1svc
Host wwwsitecom
SOAPAction GetNextContact
hellip
ltsoapEnvelope xmlnssoap= hellip
hellip
ltsoapEnvelopegt
SOAP
Client
Contact Data
return GetContact(2)
REST ndash это запрос ресурса
REST
Service
GET sitecomMyService1svcContact(2)
REST
Client
Contact Data
Принципы REST
bull Пользователь взаимодействуют с ресурсами которыми может
быть всё что можно поименовать
bull Каждый ресурс имеет свой уникальный идентификатор ndash URI
bull Взаимодействие с ресурсами происходит по средствам HTTP
(команды GET POST PUT и DELETE)
bull Ресурсы описывают себя сами
bull Content-Type Content-Length hellip
bull В ресурсах могут содержатся ссылки на другие ресурсы
Ограничения REST
bull Stateless ndash отсутствие состояния у сервера Вся информация
необходимая для обработки запроса ресурса содержится в
самом запросе
bull Idempotent ndash повторное действие над объектом не
изменяет его
bull Side Effects ndash запрашивая значение объекта по GET не должно
происходить изменение этого или другого объекта
bull HTTP only
Интернет магазин
Клиенты
Клиент 1
Клиент 2
Счет 1
Счет 2
helliphellip
Клиент N
Ресурс URI
Клиенты mysitecomClients
Клиент mysitecomClientsClient
Счет mysitecomClientsClientaccount
hellip hellip
WebGet WebInvoke
bull WebGet ndash связывает метод с HTTP GET запросом
bull WebInvoke ndash все остальные HTTP запросы (POST PUT hellip)
bull UriTemplate ndash шаблон URI для связывания метода с запросом
Практика
OData
Протокол доступа к данным
основанный на REST
архитектуре
Адресация данных
bull Обращение к коллекции объектов
bull httpServicesvcCustomers
bull Обращение к объекту по PK
bull httpServicesvcCustomers(523)
bull Обращение к полю объекта
bull httpServicesvcCustomers(523)Name
bull Обращение к коллекции объектов с сортировкой
bull httpServicesvcCustomers$orderby=Name
bull Обращение к коллекции объектов с фильтрацией
bull httpServicesvcCustomers$filter=Created gt rsquo2008-01-01rsquo
bull Постарничный доступ
bull httpServicesvcCustomers$top=10amp$skip=20
Контроль доступаbull Видимость
bull Управление видимостью на уровне контейнера
объектов
bull Опции Read Query Write
bull Аутентификация
bull Интеграция с hosting-средой
bull ASPNET WCF пользовательская аутентификация
bull Перехватчики (interceptors)
bull Выполняются перед GETPUTPOSTDELETE
bull Включают валидацию и пользовательские
политики безопасности на уровне строк данных
Перехватчики
bull QueryInterceptor
bull ChangeInterceptor
[QueryInterceptor(Orders)]public ExpressionltFuncltOrder boolgtgt OnQueryOrders()
return o =gt oCustomerContactName == HttpContextCurrentUserIdentityName
[ChangeInterceptor(Products)]public void OnChangeProducts(Product product
UpdateOperations operations) if (operations == UpdateOperationsDelete)
throw new DataServiceException(400 Products cannot be deleted)
Конкурентный доступ
bull Optimistic concurrency
bull Интеграция с существующей
HTTP инфраструктурой
GET Customers(1)
200 ETagxx
PUTCustomers(1)
If-Match xx
201 ETagxx
OR
412 ETagxx
Практика
Итогиbull Работа со связанными сущностями
bull Модификация данных (GET POST PUT MERGE
DELETE)
bull Конкурентный доступ
bull Пакетная обработка
bull Сервисные операции
bull Различные источники данных
bull Безопасность ограничение видимости
bull Перехватчики
bull Различное представление данных
bull Клиентские прокси (NET PHP Java)
Все выше сказанное честно позаимствовано тут
bull MSDN Magazine
bull Extending WCF with Custom Behaviors
(httpmsdnmicrosoftcomen-usmagazinecc163302aspx)
bull WCF Bindings In Depth (httpmsdnmicrosoftcomen-
usmagazinecc163394aspx)
bull TechDaysru
bull DotNetCurrycom
bull DevCurrycom
bull Службы WCF Data Services
bull httpmsdnmicrosoftcomru-rulibrarycc668792aspx
Спасибо за внимание
Поведение (Behavior)
Клиент Сервис
СообщениеABC A B CBv Bv
Выполнение (Hosting)
Клиент Сервис
СообщениеABC A B C
A B C
Metadata
Bv Bv
Bv Bv
Proxy ServiceHostltTgt()Hosting Environments
WAS IIS exeWindowsService
DllHost
Типы контрактов Контракт
(Что)bull Описывает операции
выполняемые сервисом
bull CLR тип соответствует WSDLService
bull Структура данных
bull CLR тип соответствует XSDData
bull Структура сообщений
bull CLR тип соответствует SOAP сообщению
Message
Bin
din
g(К
ак
)
Address (Где)
Contract (Что)
Привязки
Просторы интернета
Привязки
(Как)
Поведение
Поведение предназначено для модификации и
расширения функциональности сервиса или клиента
Поведение
(Behavior)
[ServiceBehavior(InstanceContextMode =
InstanceContextModeSingleIncludeExceptionDetailInFaults = true)]
public class Service IService
[OperationBehavior(ReleaseInstanceMode =
ReleaseInstanceModeAfterCall)]public DateTime GetCurrentDate()
return DateTimeNow
SingleMultiplePerSessionSingle
Instancing amp Concurrency
Service
InstanceContextMode ConcurrencyMode
PerSession
PerCall
Single
Single
Reentrant
Multiple
Поведение
(Behavior)
Практика
Итоги
bull WCF обобщает все предыдущие технологии меж процессорного
взаимодействия
bull Транспорт HTTP TCP NamedPipes MSMQ Custom
bull Кодировка Text Binary MTOM Custom
bull Поддерживаются сессии гарантия доставки шифрование
транзакции hellip Custom
bull Взаимодействие с сервером прозрачно для клиента
bull Контракт говорит ndash Что
bull Привязка говорит ndash Как
bull Адрес говорит ndash Где
bull Поведение молча манипулирует сервисом
Безопасность
Безопасность
bull Конфиденциальность (confidentiality)
bull Целостность (integrity)
bull Безопасность
o на уровне сообщения
o на уровне транспорта
bull Аутентификация
o Username
o Сертификаты
o Windows
o SAML токены
Режимы безопасности
bull отсутствует (None)
bull на уровне сообщения (Message)
bull на транспортном уровне (Transport)
bull смешанный (TransportWithMessageCredential)
bull двухуровневый (Both)
bull 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-сервис
bull Бинарное сжатие
bull Имперсонацияделегирование
bull Шифрование билетом Kerberos
Windows
Windows
контроллер
домена
Итоги
bull Безопасность по умолчанию включена
bull Безопасность на уровне транспорта и SOAP
сообщения
bull Интероперабельность
bull WS-Security
bull SAML токены
bull Поддержка большинства стандартных сценариев
bull Расширяемость и гибкость
Расширяемость WCF
WCFКлиент Сервис
Proxy DispatcherContract
Channel stackTransactions
Reliability
Security
Encoder
Transport
Channel stackTransactions
Reliability
Security
Encoder
TransportAddress
Binding
Расширяемость прокси-клиента
Метод 1 Метод 2
ClientOperation ClientOperation
ClientRuntime
hellipEncoderTransport
ОбъектыОбъекты
Сообщение
1
2
3
Проверка
параметров1
Формирование
сообщения
(сериализация)2
Проверка
сообщения3
Channel stack
Расширяемость диспетчера
Операция 1 Операция 2
DispatchOperation DispatchOperation
DispatchRuntime
hellipEncoderTransport
5
3
2
Channel stack
1
4
1 Проверка
сообщения
2 Выбор операции
Формирование
объекта
(десериализация)
3
4
Вызов
операции5
Проверка
параметров
ОбъектыОбъекты
Сообщение
Интерфейсы расширений
Этап Интерфейс перехватчика Описание
Проверка
параметровIParameterInspector
Используется до и после вызова
для проверки и изменения
значений параметров
Форматирование
сообщений
IDispatchMessageFormatter
IClientFormatter
Используется для сериализации и
десериализации
Проверка
сообщений
IDispatchMessageInspector
IClientMessageInspector
Используется до отправки и после
получения для проверки и замены
содержимого сообщений
Выбор операцийIDispatchOperationSelector
IClientOperationSelector
Используется для выбора
вызываемой операции для
определенного сообщения
Вызов операции IOperationInvokerИспользуется для вызова
операции
Клиент Сервис
Клиент Сервис
Клиент Сервис
Клиент Сервис
Сервис
Интерфейсы расширений
bull IInstanceProvider GetInstance(InstanceContext)
ReleaseInstance(InstanceContext Instance)
bull IErrorHandlerbull HandleError(Exception) bool
bull ProvideFault(Exception MessageVersion ref Message)
Поведение
bull Это особый тип класса расширяющий поведение серверной или
клиентской среды выполнения
bull Поведения применяются к классам ServiceHost на сервере и
ChannelFactory на клиенте
bull 4 типа пользовательских поведений
Сервис (IServiceBehavior)
Конечная точка (IEndpointBehavior)
Контракт (IContractBehavior)
Операция (IOperationBehavior)
bull IBehavior
bull Validate
bull AddBindingParameters
bull ApplyDispatchBehavior
bull ApplyClientBehavior
Уровни влияния поведений
Контекст Интерфейс Влияние
Service Endpoint Contract Operation
Service IServiceBehavior
Endpoint IEndpointBehavior
Contract IContractBehavior
Operation IOperationBehavior
Практика
WCF 40 Whatrsquos new
WCF 40
bull WCF
bull Activation Service
bull Routing Service
bull WS-Discovery
bull Standard Endpoints
bull HTTP Decompression on Client (Gzip)
bull WCF REST
bull Caching
bull Auto select format
Обнаружение WCF
Клиент СервисСервис
Discovery
Request
Discovery
Endpoint
Discovery
Response
СервисСервис
Discovery
Endpoint
Discovery
Response
Discovery
Request
Discovery
Endpoint
Discovery
Response
Сервис
Оповещение ONOFF
Announcements
Endpoint
Сервис
HelloBye
СервисСервис
HelloBye
Discovery
Endpoint
Клиент
Сделаем сервис обнажаемымbull Программная реализация
bull Либо в конфигеltservicesgt
ltservice name = MyServicegtltendpoint kind=udpDiscoveryEndpoint gt
ltservicegtltservicesgtltbehaviorsgtltserviceBehaviorsgtltbehaviorgt
ltserviceDiscoverygtltbehaviorgt
ltserviceBehaviorsgtltbehaviorsgt
ServiceHost host = new ServiceHost()hostAddServiceEndpoint(new UdpDiscoveryEndpoint()) var discovery = new ServiceDiscoveryBehavior() hostDescriptionBehaviorsAdd(discovery)hostOpen()
kindbull UdpDiscoveryEndpoint
bull UpdAnnouncementEndpoint
bull DynamicEndpoint
Давайте найдем сервис
var discoveryClient =new DiscoveryClient(new UdpDiscoveryEndpoint())
FindCriteria criteria = new FindCriteria(typeof(IMyContract)) criteriaMaxResults = 1 FindResponse discovered = discoveryClientFind(criteria) discoveryClientClose()
EndpointAddress address = discoveredEndpoints[0]Address Binding binding = new NetTcpBinding() var factory = new ChannelFactoryltIMyContractgt(binding address)
IMyContract proxy = factoryCreateChannel()proxyMyMethod() ((ICommunicationObject)proxy)Close()
Практика
Publish-Subscribe Pattern
PublisherPubSub
Service
Publish
Announcements
Endpoint
Discovery
Endpoint
Subscriber
HelloBye
Subscriber
Discover
PubSub
Discovery
EndpointDiscover
Subscribers
SOAP vs REST
prevContactIndex++
return Contacts[prevContactIndex]
SOAP ndash это выполнение операции
SOAP
Service
POST ServiceAccessMyService1svc
Host wwwsitecom
SOAPAction GetNextContact
hellip
ltsoapEnvelope xmlnssoap= hellip
hellip
ltsoapEnvelopegt
SOAP
Client
Contact Data
return GetContact(2)
REST ndash это запрос ресурса
REST
Service
GET sitecomMyService1svcContact(2)
REST
Client
Contact Data
Принципы REST
bull Пользователь взаимодействуют с ресурсами которыми может
быть всё что можно поименовать
bull Каждый ресурс имеет свой уникальный идентификатор ndash URI
bull Взаимодействие с ресурсами происходит по средствам HTTP
(команды GET POST PUT и DELETE)
bull Ресурсы описывают себя сами
bull Content-Type Content-Length hellip
bull В ресурсах могут содержатся ссылки на другие ресурсы
Ограничения REST
bull Stateless ndash отсутствие состояния у сервера Вся информация
необходимая для обработки запроса ресурса содержится в
самом запросе
bull Idempotent ndash повторное действие над объектом не
изменяет его
bull Side Effects ndash запрашивая значение объекта по GET не должно
происходить изменение этого или другого объекта
bull HTTP only
Интернет магазин
Клиенты
Клиент 1
Клиент 2
Счет 1
Счет 2
helliphellip
Клиент N
Ресурс URI
Клиенты mysitecomClients
Клиент mysitecomClientsClient
Счет mysitecomClientsClientaccount
hellip hellip
WebGet WebInvoke
bull WebGet ndash связывает метод с HTTP GET запросом
bull WebInvoke ndash все остальные HTTP запросы (POST PUT hellip)
bull UriTemplate ndash шаблон URI для связывания метода с запросом
Практика
OData
Протокол доступа к данным
основанный на REST
архитектуре
Адресация данных
bull Обращение к коллекции объектов
bull httpServicesvcCustomers
bull Обращение к объекту по PK
bull httpServicesvcCustomers(523)
bull Обращение к полю объекта
bull httpServicesvcCustomers(523)Name
bull Обращение к коллекции объектов с сортировкой
bull httpServicesvcCustomers$orderby=Name
bull Обращение к коллекции объектов с фильтрацией
bull httpServicesvcCustomers$filter=Created gt rsquo2008-01-01rsquo
bull Постарничный доступ
bull httpServicesvcCustomers$top=10amp$skip=20
Контроль доступаbull Видимость
bull Управление видимостью на уровне контейнера
объектов
bull Опции Read Query Write
bull Аутентификация
bull Интеграция с hosting-средой
bull ASPNET WCF пользовательская аутентификация
bull Перехватчики (interceptors)
bull Выполняются перед GETPUTPOSTDELETE
bull Включают валидацию и пользовательские
политики безопасности на уровне строк данных
Перехватчики
bull QueryInterceptor
bull ChangeInterceptor
[QueryInterceptor(Orders)]public ExpressionltFuncltOrder boolgtgt OnQueryOrders()
return o =gt oCustomerContactName == HttpContextCurrentUserIdentityName
[ChangeInterceptor(Products)]public void OnChangeProducts(Product product
UpdateOperations operations) if (operations == UpdateOperationsDelete)
throw new DataServiceException(400 Products cannot be deleted)
Конкурентный доступ
bull Optimistic concurrency
bull Интеграция с существующей
HTTP инфраструктурой
GET Customers(1)
200 ETagxx
PUTCustomers(1)
If-Match xx
201 ETagxx
OR
412 ETagxx
Практика
Итогиbull Работа со связанными сущностями
bull Модификация данных (GET POST PUT MERGE
DELETE)
bull Конкурентный доступ
bull Пакетная обработка
bull Сервисные операции
bull Различные источники данных
bull Безопасность ограничение видимости
bull Перехватчики
bull Различное представление данных
bull Клиентские прокси (NET PHP Java)
Все выше сказанное честно позаимствовано тут
bull MSDN Magazine
bull Extending WCF with Custom Behaviors
(httpmsdnmicrosoftcomen-usmagazinecc163302aspx)
bull WCF Bindings In Depth (httpmsdnmicrosoftcomen-
usmagazinecc163394aspx)
bull TechDaysru
bull DotNetCurrycom
bull DevCurrycom
bull Службы WCF Data Services
bull httpmsdnmicrosoftcomru-rulibrarycc668792aspx
Спасибо за внимание
Выполнение (Hosting)
Клиент Сервис
СообщениеABC A B C
A B C
Metadata
Bv Bv
Bv Bv
Proxy ServiceHostltTgt()Hosting Environments
WAS IIS exeWindowsService
DllHost
Типы контрактов Контракт
(Что)bull Описывает операции
выполняемые сервисом
bull CLR тип соответствует WSDLService
bull Структура данных
bull CLR тип соответствует XSDData
bull Структура сообщений
bull CLR тип соответствует SOAP сообщению
Message
Bin
din
g(К
ак
)
Address (Где)
Contract (Что)
Привязки
Просторы интернета
Привязки
(Как)
Поведение
Поведение предназначено для модификации и
расширения функциональности сервиса или клиента
Поведение
(Behavior)
[ServiceBehavior(InstanceContextMode =
InstanceContextModeSingleIncludeExceptionDetailInFaults = true)]
public class Service IService
[OperationBehavior(ReleaseInstanceMode =
ReleaseInstanceModeAfterCall)]public DateTime GetCurrentDate()
return DateTimeNow
SingleMultiplePerSessionSingle
Instancing amp Concurrency
Service
InstanceContextMode ConcurrencyMode
PerSession
PerCall
Single
Single
Reentrant
Multiple
Поведение
(Behavior)
Практика
Итоги
bull WCF обобщает все предыдущие технологии меж процессорного
взаимодействия
bull Транспорт HTTP TCP NamedPipes MSMQ Custom
bull Кодировка Text Binary MTOM Custom
bull Поддерживаются сессии гарантия доставки шифрование
транзакции hellip Custom
bull Взаимодействие с сервером прозрачно для клиента
bull Контракт говорит ndash Что
bull Привязка говорит ndash Как
bull Адрес говорит ndash Где
bull Поведение молча манипулирует сервисом
Безопасность
Безопасность
bull Конфиденциальность (confidentiality)
bull Целостность (integrity)
bull Безопасность
o на уровне сообщения
o на уровне транспорта
bull Аутентификация
o Username
o Сертификаты
o Windows
o SAML токены
Режимы безопасности
bull отсутствует (None)
bull на уровне сообщения (Message)
bull на транспортном уровне (Transport)
bull смешанный (TransportWithMessageCredential)
bull двухуровневый (Both)
bull 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-сервис
bull Бинарное сжатие
bull Имперсонацияделегирование
bull Шифрование билетом Kerberos
Windows
Windows
контроллер
домена
Итоги
bull Безопасность по умолчанию включена
bull Безопасность на уровне транспорта и SOAP
сообщения
bull Интероперабельность
bull WS-Security
bull SAML токены
bull Поддержка большинства стандартных сценариев
bull Расширяемость и гибкость
Расширяемость WCF
WCFКлиент Сервис
Proxy DispatcherContract
Channel stackTransactions
Reliability
Security
Encoder
Transport
Channel stackTransactions
Reliability
Security
Encoder
TransportAddress
Binding
Расширяемость прокси-клиента
Метод 1 Метод 2
ClientOperation ClientOperation
ClientRuntime
hellipEncoderTransport
ОбъектыОбъекты
Сообщение
1
2
3
Проверка
параметров1
Формирование
сообщения
(сериализация)2
Проверка
сообщения3
Channel stack
Расширяемость диспетчера
Операция 1 Операция 2
DispatchOperation DispatchOperation
DispatchRuntime
hellipEncoderTransport
5
3
2
Channel stack
1
4
1 Проверка
сообщения
2 Выбор операции
Формирование
объекта
(десериализация)
3
4
Вызов
операции5
Проверка
параметров
ОбъектыОбъекты
Сообщение
Интерфейсы расширений
Этап Интерфейс перехватчика Описание
Проверка
параметровIParameterInspector
Используется до и после вызова
для проверки и изменения
значений параметров
Форматирование
сообщений
IDispatchMessageFormatter
IClientFormatter
Используется для сериализации и
десериализации
Проверка
сообщений
IDispatchMessageInspector
IClientMessageInspector
Используется до отправки и после
получения для проверки и замены
содержимого сообщений
Выбор операцийIDispatchOperationSelector
IClientOperationSelector
Используется для выбора
вызываемой операции для
определенного сообщения
Вызов операции IOperationInvokerИспользуется для вызова
операции
Клиент Сервис
Клиент Сервис
Клиент Сервис
Клиент Сервис
Сервис
Интерфейсы расширений
bull IInstanceProvider GetInstance(InstanceContext)
ReleaseInstance(InstanceContext Instance)
bull IErrorHandlerbull HandleError(Exception) bool
bull ProvideFault(Exception MessageVersion ref Message)
Поведение
bull Это особый тип класса расширяющий поведение серверной или
клиентской среды выполнения
bull Поведения применяются к классам ServiceHost на сервере и
ChannelFactory на клиенте
bull 4 типа пользовательских поведений
Сервис (IServiceBehavior)
Конечная точка (IEndpointBehavior)
Контракт (IContractBehavior)
Операция (IOperationBehavior)
bull IBehavior
bull Validate
bull AddBindingParameters
bull ApplyDispatchBehavior
bull ApplyClientBehavior
Уровни влияния поведений
Контекст Интерфейс Влияние
Service Endpoint Contract Operation
Service IServiceBehavior
Endpoint IEndpointBehavior
Contract IContractBehavior
Operation IOperationBehavior
Практика
WCF 40 Whatrsquos new
WCF 40
bull WCF
bull Activation Service
bull Routing Service
bull WS-Discovery
bull Standard Endpoints
bull HTTP Decompression on Client (Gzip)
bull WCF REST
bull Caching
bull Auto select format
Обнаружение WCF
Клиент СервисСервис
Discovery
Request
Discovery
Endpoint
Discovery
Response
СервисСервис
Discovery
Endpoint
Discovery
Response
Discovery
Request
Discovery
Endpoint
Discovery
Response
Сервис
Оповещение ONOFF
Announcements
Endpoint
Сервис
HelloBye
СервисСервис
HelloBye
Discovery
Endpoint
Клиент
Сделаем сервис обнажаемымbull Программная реализация
bull Либо в конфигеltservicesgt
ltservice name = MyServicegtltendpoint kind=udpDiscoveryEndpoint gt
ltservicegtltservicesgtltbehaviorsgtltserviceBehaviorsgtltbehaviorgt
ltserviceDiscoverygtltbehaviorgt
ltserviceBehaviorsgtltbehaviorsgt
ServiceHost host = new ServiceHost()hostAddServiceEndpoint(new UdpDiscoveryEndpoint()) var discovery = new ServiceDiscoveryBehavior() hostDescriptionBehaviorsAdd(discovery)hostOpen()
kindbull UdpDiscoveryEndpoint
bull UpdAnnouncementEndpoint
bull DynamicEndpoint
Давайте найдем сервис
var discoveryClient =new DiscoveryClient(new UdpDiscoveryEndpoint())
FindCriteria criteria = new FindCriteria(typeof(IMyContract)) criteriaMaxResults = 1 FindResponse discovered = discoveryClientFind(criteria) discoveryClientClose()
EndpointAddress address = discoveredEndpoints[0]Address Binding binding = new NetTcpBinding() var factory = new ChannelFactoryltIMyContractgt(binding address)
IMyContract proxy = factoryCreateChannel()proxyMyMethod() ((ICommunicationObject)proxy)Close()
Практика
Publish-Subscribe Pattern
PublisherPubSub
Service
Publish
Announcements
Endpoint
Discovery
Endpoint
Subscriber
HelloBye
Subscriber
Discover
PubSub
Discovery
EndpointDiscover
Subscribers
SOAP vs REST
prevContactIndex++
return Contacts[prevContactIndex]
SOAP ndash это выполнение операции
SOAP
Service
POST ServiceAccessMyService1svc
Host wwwsitecom
SOAPAction GetNextContact
hellip
ltsoapEnvelope xmlnssoap= hellip
hellip
ltsoapEnvelopegt
SOAP
Client
Contact Data
return GetContact(2)
REST ndash это запрос ресурса
REST
Service
GET sitecomMyService1svcContact(2)
REST
Client
Contact Data
Принципы REST
bull Пользователь взаимодействуют с ресурсами которыми может
быть всё что можно поименовать
bull Каждый ресурс имеет свой уникальный идентификатор ndash URI
bull Взаимодействие с ресурсами происходит по средствам HTTP
(команды GET POST PUT и DELETE)
bull Ресурсы описывают себя сами
bull Content-Type Content-Length hellip
bull В ресурсах могут содержатся ссылки на другие ресурсы
Ограничения REST
bull Stateless ndash отсутствие состояния у сервера Вся информация
необходимая для обработки запроса ресурса содержится в
самом запросе
bull Idempotent ndash повторное действие над объектом не
изменяет его
bull Side Effects ndash запрашивая значение объекта по GET не должно
происходить изменение этого или другого объекта
bull HTTP only
Интернет магазин
Клиенты
Клиент 1
Клиент 2
Счет 1
Счет 2
helliphellip
Клиент N
Ресурс URI
Клиенты mysitecomClients
Клиент mysitecomClientsClient
Счет mysitecomClientsClientaccount
hellip hellip
WebGet WebInvoke
bull WebGet ndash связывает метод с HTTP GET запросом
bull WebInvoke ndash все остальные HTTP запросы (POST PUT hellip)
bull UriTemplate ndash шаблон URI для связывания метода с запросом
Практика
OData
Протокол доступа к данным
основанный на REST
архитектуре
Адресация данных
bull Обращение к коллекции объектов
bull httpServicesvcCustomers
bull Обращение к объекту по PK
bull httpServicesvcCustomers(523)
bull Обращение к полю объекта
bull httpServicesvcCustomers(523)Name
bull Обращение к коллекции объектов с сортировкой
bull httpServicesvcCustomers$orderby=Name
bull Обращение к коллекции объектов с фильтрацией
bull httpServicesvcCustomers$filter=Created gt rsquo2008-01-01rsquo
bull Постарничный доступ
bull httpServicesvcCustomers$top=10amp$skip=20
Контроль доступаbull Видимость
bull Управление видимостью на уровне контейнера
объектов
bull Опции Read Query Write
bull Аутентификация
bull Интеграция с hosting-средой
bull ASPNET WCF пользовательская аутентификация
bull Перехватчики (interceptors)
bull Выполняются перед GETPUTPOSTDELETE
bull Включают валидацию и пользовательские
политики безопасности на уровне строк данных
Перехватчики
bull QueryInterceptor
bull ChangeInterceptor
[QueryInterceptor(Orders)]public ExpressionltFuncltOrder boolgtgt OnQueryOrders()
return o =gt oCustomerContactName == HttpContextCurrentUserIdentityName
[ChangeInterceptor(Products)]public void OnChangeProducts(Product product
UpdateOperations operations) if (operations == UpdateOperationsDelete)
throw new DataServiceException(400 Products cannot be deleted)
Конкурентный доступ
bull Optimistic concurrency
bull Интеграция с существующей
HTTP инфраструктурой
GET Customers(1)
200 ETagxx
PUTCustomers(1)
If-Match xx
201 ETagxx
OR
412 ETagxx
Практика
Итогиbull Работа со связанными сущностями
bull Модификация данных (GET POST PUT MERGE
DELETE)
bull Конкурентный доступ
bull Пакетная обработка
bull Сервисные операции
bull Различные источники данных
bull Безопасность ограничение видимости
bull Перехватчики
bull Различное представление данных
bull Клиентские прокси (NET PHP Java)
Все выше сказанное честно позаимствовано тут
bull MSDN Magazine
bull Extending WCF with Custom Behaviors
(httpmsdnmicrosoftcomen-usmagazinecc163302aspx)
bull WCF Bindings In Depth (httpmsdnmicrosoftcomen-
usmagazinecc163394aspx)
bull TechDaysru
bull DotNetCurrycom
bull DevCurrycom
bull Службы WCF Data Services
bull httpmsdnmicrosoftcomru-rulibrarycc668792aspx
Спасибо за внимание
Типы контрактов Контракт
(Что)bull Описывает операции
выполняемые сервисом
bull CLR тип соответствует WSDLService
bull Структура данных
bull CLR тип соответствует XSDData
bull Структура сообщений
bull CLR тип соответствует SOAP сообщению
Message
Bin
din
g(К
ак
)
Address (Где)
Contract (Что)
Привязки
Просторы интернета
Привязки
(Как)
Поведение
Поведение предназначено для модификации и
расширения функциональности сервиса или клиента
Поведение
(Behavior)
[ServiceBehavior(InstanceContextMode =
InstanceContextModeSingleIncludeExceptionDetailInFaults = true)]
public class Service IService
[OperationBehavior(ReleaseInstanceMode =
ReleaseInstanceModeAfterCall)]public DateTime GetCurrentDate()
return DateTimeNow
SingleMultiplePerSessionSingle
Instancing amp Concurrency
Service
InstanceContextMode ConcurrencyMode
PerSession
PerCall
Single
Single
Reentrant
Multiple
Поведение
(Behavior)
Практика
Итоги
bull WCF обобщает все предыдущие технологии меж процессорного
взаимодействия
bull Транспорт HTTP TCP NamedPipes MSMQ Custom
bull Кодировка Text Binary MTOM Custom
bull Поддерживаются сессии гарантия доставки шифрование
транзакции hellip Custom
bull Взаимодействие с сервером прозрачно для клиента
bull Контракт говорит ndash Что
bull Привязка говорит ndash Как
bull Адрес говорит ndash Где
bull Поведение молча манипулирует сервисом
Безопасность
Безопасность
bull Конфиденциальность (confidentiality)
bull Целостность (integrity)
bull Безопасность
o на уровне сообщения
o на уровне транспорта
bull Аутентификация
o Username
o Сертификаты
o Windows
o SAML токены
Режимы безопасности
bull отсутствует (None)
bull на уровне сообщения (Message)
bull на транспортном уровне (Transport)
bull смешанный (TransportWithMessageCredential)
bull двухуровневый (Both)
bull 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-сервис
bull Бинарное сжатие
bull Имперсонацияделегирование
bull Шифрование билетом Kerberos
Windows
Windows
контроллер
домена
Итоги
bull Безопасность по умолчанию включена
bull Безопасность на уровне транспорта и SOAP
сообщения
bull Интероперабельность
bull WS-Security
bull SAML токены
bull Поддержка большинства стандартных сценариев
bull Расширяемость и гибкость
Расширяемость WCF
WCFКлиент Сервис
Proxy DispatcherContract
Channel stackTransactions
Reliability
Security
Encoder
Transport
Channel stackTransactions
Reliability
Security
Encoder
TransportAddress
Binding
Расширяемость прокси-клиента
Метод 1 Метод 2
ClientOperation ClientOperation
ClientRuntime
hellipEncoderTransport
ОбъектыОбъекты
Сообщение
1
2
3
Проверка
параметров1
Формирование
сообщения
(сериализация)2
Проверка
сообщения3
Channel stack
Расширяемость диспетчера
Операция 1 Операция 2
DispatchOperation DispatchOperation
DispatchRuntime
hellipEncoderTransport
5
3
2
Channel stack
1
4
1 Проверка
сообщения
2 Выбор операции
Формирование
объекта
(десериализация)
3
4
Вызов
операции5
Проверка
параметров
ОбъектыОбъекты
Сообщение
Интерфейсы расширений
Этап Интерфейс перехватчика Описание
Проверка
параметровIParameterInspector
Используется до и после вызова
для проверки и изменения
значений параметров
Форматирование
сообщений
IDispatchMessageFormatter
IClientFormatter
Используется для сериализации и
десериализации
Проверка
сообщений
IDispatchMessageInspector
IClientMessageInspector
Используется до отправки и после
получения для проверки и замены
содержимого сообщений
Выбор операцийIDispatchOperationSelector
IClientOperationSelector
Используется для выбора
вызываемой операции для
определенного сообщения
Вызов операции IOperationInvokerИспользуется для вызова
операции
Клиент Сервис
Клиент Сервис
Клиент Сервис
Клиент Сервис
Сервис
Интерфейсы расширений
bull IInstanceProvider GetInstance(InstanceContext)
ReleaseInstance(InstanceContext Instance)
bull IErrorHandlerbull HandleError(Exception) bool
bull ProvideFault(Exception MessageVersion ref Message)
Поведение
bull Это особый тип класса расширяющий поведение серверной или
клиентской среды выполнения
bull Поведения применяются к классам ServiceHost на сервере и
ChannelFactory на клиенте
bull 4 типа пользовательских поведений
Сервис (IServiceBehavior)
Конечная точка (IEndpointBehavior)
Контракт (IContractBehavior)
Операция (IOperationBehavior)
bull IBehavior
bull Validate
bull AddBindingParameters
bull ApplyDispatchBehavior
bull ApplyClientBehavior
Уровни влияния поведений
Контекст Интерфейс Влияние
Service Endpoint Contract Operation
Service IServiceBehavior
Endpoint IEndpointBehavior
Contract IContractBehavior
Operation IOperationBehavior
Практика
WCF 40 Whatrsquos new
WCF 40
bull WCF
bull Activation Service
bull Routing Service
bull WS-Discovery
bull Standard Endpoints
bull HTTP Decompression on Client (Gzip)
bull WCF REST
bull Caching
bull Auto select format
Обнаружение WCF
Клиент СервисСервис
Discovery
Request
Discovery
Endpoint
Discovery
Response
СервисСервис
Discovery
Endpoint
Discovery
Response
Discovery
Request
Discovery
Endpoint
Discovery
Response
Сервис
Оповещение ONOFF
Announcements
Endpoint
Сервис
HelloBye
СервисСервис
HelloBye
Discovery
Endpoint
Клиент
Сделаем сервис обнажаемымbull Программная реализация
bull Либо в конфигеltservicesgt
ltservice name = MyServicegtltendpoint kind=udpDiscoveryEndpoint gt
ltservicegtltservicesgtltbehaviorsgtltserviceBehaviorsgtltbehaviorgt
ltserviceDiscoverygtltbehaviorgt
ltserviceBehaviorsgtltbehaviorsgt
ServiceHost host = new ServiceHost()hostAddServiceEndpoint(new UdpDiscoveryEndpoint()) var discovery = new ServiceDiscoveryBehavior() hostDescriptionBehaviorsAdd(discovery)hostOpen()
kindbull UdpDiscoveryEndpoint
bull UpdAnnouncementEndpoint
bull DynamicEndpoint
Давайте найдем сервис
var discoveryClient =new DiscoveryClient(new UdpDiscoveryEndpoint())
FindCriteria criteria = new FindCriteria(typeof(IMyContract)) criteriaMaxResults = 1 FindResponse discovered = discoveryClientFind(criteria) discoveryClientClose()
EndpointAddress address = discoveredEndpoints[0]Address Binding binding = new NetTcpBinding() var factory = new ChannelFactoryltIMyContractgt(binding address)
IMyContract proxy = factoryCreateChannel()proxyMyMethod() ((ICommunicationObject)proxy)Close()
Практика
Publish-Subscribe Pattern
PublisherPubSub
Service
Publish
Announcements
Endpoint
Discovery
Endpoint
Subscriber
HelloBye
Subscriber
Discover
PubSub
Discovery
EndpointDiscover
Subscribers
SOAP vs REST
prevContactIndex++
return Contacts[prevContactIndex]
SOAP ndash это выполнение операции
SOAP
Service
POST ServiceAccessMyService1svc
Host wwwsitecom
SOAPAction GetNextContact
hellip
ltsoapEnvelope xmlnssoap= hellip
hellip
ltsoapEnvelopegt
SOAP
Client
Contact Data
return GetContact(2)
REST ndash это запрос ресурса
REST
Service
GET sitecomMyService1svcContact(2)
REST
Client
Contact Data
Принципы REST
bull Пользователь взаимодействуют с ресурсами которыми может
быть всё что можно поименовать
bull Каждый ресурс имеет свой уникальный идентификатор ndash URI
bull Взаимодействие с ресурсами происходит по средствам HTTP
(команды GET POST PUT и DELETE)
bull Ресурсы описывают себя сами
bull Content-Type Content-Length hellip
bull В ресурсах могут содержатся ссылки на другие ресурсы
Ограничения REST
bull Stateless ndash отсутствие состояния у сервера Вся информация
необходимая для обработки запроса ресурса содержится в
самом запросе
bull Idempotent ndash повторное действие над объектом не
изменяет его
bull Side Effects ndash запрашивая значение объекта по GET не должно
происходить изменение этого или другого объекта
bull HTTP only
Интернет магазин
Клиенты
Клиент 1
Клиент 2
Счет 1
Счет 2
helliphellip
Клиент N
Ресурс URI
Клиенты mysitecomClients
Клиент mysitecomClientsClient
Счет mysitecomClientsClientaccount
hellip hellip
WebGet WebInvoke
bull WebGet ndash связывает метод с HTTP GET запросом
bull WebInvoke ndash все остальные HTTP запросы (POST PUT hellip)
bull UriTemplate ndash шаблон URI для связывания метода с запросом
Практика
OData
Протокол доступа к данным
основанный на REST
архитектуре
Адресация данных
bull Обращение к коллекции объектов
bull httpServicesvcCustomers
bull Обращение к объекту по PK
bull httpServicesvcCustomers(523)
bull Обращение к полю объекта
bull httpServicesvcCustomers(523)Name
bull Обращение к коллекции объектов с сортировкой
bull httpServicesvcCustomers$orderby=Name
bull Обращение к коллекции объектов с фильтрацией
bull httpServicesvcCustomers$filter=Created gt rsquo2008-01-01rsquo
bull Постарничный доступ
bull httpServicesvcCustomers$top=10amp$skip=20
Контроль доступаbull Видимость
bull Управление видимостью на уровне контейнера
объектов
bull Опции Read Query Write
bull Аутентификация
bull Интеграция с hosting-средой
bull ASPNET WCF пользовательская аутентификация
bull Перехватчики (interceptors)
bull Выполняются перед GETPUTPOSTDELETE
bull Включают валидацию и пользовательские
политики безопасности на уровне строк данных
Перехватчики
bull QueryInterceptor
bull ChangeInterceptor
[QueryInterceptor(Orders)]public ExpressionltFuncltOrder boolgtgt OnQueryOrders()
return o =gt oCustomerContactName == HttpContextCurrentUserIdentityName
[ChangeInterceptor(Products)]public void OnChangeProducts(Product product
UpdateOperations operations) if (operations == UpdateOperationsDelete)
throw new DataServiceException(400 Products cannot be deleted)
Конкурентный доступ
bull Optimistic concurrency
bull Интеграция с существующей
HTTP инфраструктурой
GET Customers(1)
200 ETagxx
PUTCustomers(1)
If-Match xx
201 ETagxx
OR
412 ETagxx
Практика
Итогиbull Работа со связанными сущностями
bull Модификация данных (GET POST PUT MERGE
DELETE)
bull Конкурентный доступ
bull Пакетная обработка
bull Сервисные операции
bull Различные источники данных
bull Безопасность ограничение видимости
bull Перехватчики
bull Различное представление данных
bull Клиентские прокси (NET PHP Java)
Все выше сказанное честно позаимствовано тут
bull MSDN Magazine
bull Extending WCF with Custom Behaviors
(httpmsdnmicrosoftcomen-usmagazinecc163302aspx)
bull WCF Bindings In Depth (httpmsdnmicrosoftcomen-
usmagazinecc163394aspx)
bull TechDaysru
bull DotNetCurrycom
bull DevCurrycom
bull Службы WCF Data Services
bull httpmsdnmicrosoftcomru-rulibrarycc668792aspx
Спасибо за внимание
Bin
din
g(К
ак
)
Address (Где)
Contract (Что)
Привязки
Просторы интернета
Привязки
(Как)
Поведение
Поведение предназначено для модификации и
расширения функциональности сервиса или клиента
Поведение
(Behavior)
[ServiceBehavior(InstanceContextMode =
InstanceContextModeSingleIncludeExceptionDetailInFaults = true)]
public class Service IService
[OperationBehavior(ReleaseInstanceMode =
ReleaseInstanceModeAfterCall)]public DateTime GetCurrentDate()
return DateTimeNow
SingleMultiplePerSessionSingle
Instancing amp Concurrency
Service
InstanceContextMode ConcurrencyMode
PerSession
PerCall
Single
Single
Reentrant
Multiple
Поведение
(Behavior)
Практика
Итоги
bull WCF обобщает все предыдущие технологии меж процессорного
взаимодействия
bull Транспорт HTTP TCP NamedPipes MSMQ Custom
bull Кодировка Text Binary MTOM Custom
bull Поддерживаются сессии гарантия доставки шифрование
транзакции hellip Custom
bull Взаимодействие с сервером прозрачно для клиента
bull Контракт говорит ndash Что
bull Привязка говорит ndash Как
bull Адрес говорит ndash Где
bull Поведение молча манипулирует сервисом
Безопасность
Безопасность
bull Конфиденциальность (confidentiality)
bull Целостность (integrity)
bull Безопасность
o на уровне сообщения
o на уровне транспорта
bull Аутентификация
o Username
o Сертификаты
o Windows
o SAML токены
Режимы безопасности
bull отсутствует (None)
bull на уровне сообщения (Message)
bull на транспортном уровне (Transport)
bull смешанный (TransportWithMessageCredential)
bull двухуровневый (Both)
bull 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-сервис
bull Бинарное сжатие
bull Имперсонацияделегирование
bull Шифрование билетом Kerberos
Windows
Windows
контроллер
домена
Итоги
bull Безопасность по умолчанию включена
bull Безопасность на уровне транспорта и SOAP
сообщения
bull Интероперабельность
bull WS-Security
bull SAML токены
bull Поддержка большинства стандартных сценариев
bull Расширяемость и гибкость
Расширяемость WCF
WCFКлиент Сервис
Proxy DispatcherContract
Channel stackTransactions
Reliability
Security
Encoder
Transport
Channel stackTransactions
Reliability
Security
Encoder
TransportAddress
Binding
Расширяемость прокси-клиента
Метод 1 Метод 2
ClientOperation ClientOperation
ClientRuntime
hellipEncoderTransport
ОбъектыОбъекты
Сообщение
1
2
3
Проверка
параметров1
Формирование
сообщения
(сериализация)2
Проверка
сообщения3
Channel stack
Расширяемость диспетчера
Операция 1 Операция 2
DispatchOperation DispatchOperation
DispatchRuntime
hellipEncoderTransport
5
3
2
Channel stack
1
4
1 Проверка
сообщения
2 Выбор операции
Формирование
объекта
(десериализация)
3
4
Вызов
операции5
Проверка
параметров
ОбъектыОбъекты
Сообщение
Интерфейсы расширений
Этап Интерфейс перехватчика Описание
Проверка
параметровIParameterInspector
Используется до и после вызова
для проверки и изменения
значений параметров
Форматирование
сообщений
IDispatchMessageFormatter
IClientFormatter
Используется для сериализации и
десериализации
Проверка
сообщений
IDispatchMessageInspector
IClientMessageInspector
Используется до отправки и после
получения для проверки и замены
содержимого сообщений
Выбор операцийIDispatchOperationSelector
IClientOperationSelector
Используется для выбора
вызываемой операции для
определенного сообщения
Вызов операции IOperationInvokerИспользуется для вызова
операции
Клиент Сервис
Клиент Сервис
Клиент Сервис
Клиент Сервис
Сервис
Интерфейсы расширений
bull IInstanceProvider GetInstance(InstanceContext)
ReleaseInstance(InstanceContext Instance)
bull IErrorHandlerbull HandleError(Exception) bool
bull ProvideFault(Exception MessageVersion ref Message)
Поведение
bull Это особый тип класса расширяющий поведение серверной или
клиентской среды выполнения
bull Поведения применяются к классам ServiceHost на сервере и
ChannelFactory на клиенте
bull 4 типа пользовательских поведений
Сервис (IServiceBehavior)
Конечная точка (IEndpointBehavior)
Контракт (IContractBehavior)
Операция (IOperationBehavior)
bull IBehavior
bull Validate
bull AddBindingParameters
bull ApplyDispatchBehavior
bull ApplyClientBehavior
Уровни влияния поведений
Контекст Интерфейс Влияние
Service Endpoint Contract Operation
Service IServiceBehavior
Endpoint IEndpointBehavior
Contract IContractBehavior
Operation IOperationBehavior
Практика
WCF 40 Whatrsquos new
WCF 40
bull WCF
bull Activation Service
bull Routing Service
bull WS-Discovery
bull Standard Endpoints
bull HTTP Decompression on Client (Gzip)
bull WCF REST
bull Caching
bull Auto select format
Обнаружение WCF
Клиент СервисСервис
Discovery
Request
Discovery
Endpoint
Discovery
Response
СервисСервис
Discovery
Endpoint
Discovery
Response
Discovery
Request
Discovery
Endpoint
Discovery
Response
Сервис
Оповещение ONOFF
Announcements
Endpoint
Сервис
HelloBye
СервисСервис
HelloBye
Discovery
Endpoint
Клиент
Сделаем сервис обнажаемымbull Программная реализация
bull Либо в конфигеltservicesgt
ltservice name = MyServicegtltendpoint kind=udpDiscoveryEndpoint gt
ltservicegtltservicesgtltbehaviorsgtltserviceBehaviorsgtltbehaviorgt
ltserviceDiscoverygtltbehaviorgt
ltserviceBehaviorsgtltbehaviorsgt
ServiceHost host = new ServiceHost()hostAddServiceEndpoint(new UdpDiscoveryEndpoint()) var discovery = new ServiceDiscoveryBehavior() hostDescriptionBehaviorsAdd(discovery)hostOpen()
kindbull UdpDiscoveryEndpoint
bull UpdAnnouncementEndpoint
bull DynamicEndpoint
Давайте найдем сервис
var discoveryClient =new DiscoveryClient(new UdpDiscoveryEndpoint())
FindCriteria criteria = new FindCriteria(typeof(IMyContract)) criteriaMaxResults = 1 FindResponse discovered = discoveryClientFind(criteria) discoveryClientClose()
EndpointAddress address = discoveredEndpoints[0]Address Binding binding = new NetTcpBinding() var factory = new ChannelFactoryltIMyContractgt(binding address)
IMyContract proxy = factoryCreateChannel()proxyMyMethod() ((ICommunicationObject)proxy)Close()
Практика
Publish-Subscribe Pattern
PublisherPubSub
Service
Publish
Announcements
Endpoint
Discovery
Endpoint
Subscriber
HelloBye
Subscriber
Discover
PubSub
Discovery
EndpointDiscover
Subscribers
SOAP vs REST
prevContactIndex++
return Contacts[prevContactIndex]
SOAP ndash это выполнение операции
SOAP
Service
POST ServiceAccessMyService1svc
Host wwwsitecom
SOAPAction GetNextContact
hellip
ltsoapEnvelope xmlnssoap= hellip
hellip
ltsoapEnvelopegt
SOAP
Client
Contact Data
return GetContact(2)
REST ndash это запрос ресурса
REST
Service
GET sitecomMyService1svcContact(2)
REST
Client
Contact Data
Принципы REST
bull Пользователь взаимодействуют с ресурсами которыми может
быть всё что можно поименовать
bull Каждый ресурс имеет свой уникальный идентификатор ndash URI
bull Взаимодействие с ресурсами происходит по средствам HTTP
(команды GET POST PUT и DELETE)
bull Ресурсы описывают себя сами
bull Content-Type Content-Length hellip
bull В ресурсах могут содержатся ссылки на другие ресурсы
Ограничения REST
bull Stateless ndash отсутствие состояния у сервера Вся информация
необходимая для обработки запроса ресурса содержится в
самом запросе
bull Idempotent ndash повторное действие над объектом не
изменяет его
bull Side Effects ndash запрашивая значение объекта по GET не должно
происходить изменение этого или другого объекта
bull HTTP only
Интернет магазин
Клиенты
Клиент 1
Клиент 2
Счет 1
Счет 2
helliphellip
Клиент N
Ресурс URI
Клиенты mysitecomClients
Клиент mysitecomClientsClient
Счет mysitecomClientsClientaccount
hellip hellip
WebGet WebInvoke
bull WebGet ndash связывает метод с HTTP GET запросом
bull WebInvoke ndash все остальные HTTP запросы (POST PUT hellip)
bull UriTemplate ndash шаблон URI для связывания метода с запросом
Практика
OData
Протокол доступа к данным
основанный на REST
архитектуре
Адресация данных
bull Обращение к коллекции объектов
bull httpServicesvcCustomers
bull Обращение к объекту по PK
bull httpServicesvcCustomers(523)
bull Обращение к полю объекта
bull httpServicesvcCustomers(523)Name
bull Обращение к коллекции объектов с сортировкой
bull httpServicesvcCustomers$orderby=Name
bull Обращение к коллекции объектов с фильтрацией
bull httpServicesvcCustomers$filter=Created gt rsquo2008-01-01rsquo
bull Постарничный доступ
bull httpServicesvcCustomers$top=10amp$skip=20
Контроль доступаbull Видимость
bull Управление видимостью на уровне контейнера
объектов
bull Опции Read Query Write
bull Аутентификация
bull Интеграция с hosting-средой
bull ASPNET WCF пользовательская аутентификация
bull Перехватчики (interceptors)
bull Выполняются перед GETPUTPOSTDELETE
bull Включают валидацию и пользовательские
политики безопасности на уровне строк данных
Перехватчики
bull QueryInterceptor
bull ChangeInterceptor
[QueryInterceptor(Orders)]public ExpressionltFuncltOrder boolgtgt OnQueryOrders()
return o =gt oCustomerContactName == HttpContextCurrentUserIdentityName
[ChangeInterceptor(Products)]public void OnChangeProducts(Product product
UpdateOperations operations) if (operations == UpdateOperationsDelete)
throw new DataServiceException(400 Products cannot be deleted)
Конкурентный доступ
bull Optimistic concurrency
bull Интеграция с существующей
HTTP инфраструктурой
GET Customers(1)
200 ETagxx
PUTCustomers(1)
If-Match xx
201 ETagxx
OR
412 ETagxx
Практика
Итогиbull Работа со связанными сущностями
bull Модификация данных (GET POST PUT MERGE
DELETE)
bull Конкурентный доступ
bull Пакетная обработка
bull Сервисные операции
bull Различные источники данных
bull Безопасность ограничение видимости
bull Перехватчики
bull Различное представление данных
bull Клиентские прокси (NET PHP Java)
Все выше сказанное честно позаимствовано тут
bull MSDN Magazine
bull Extending WCF with Custom Behaviors
(httpmsdnmicrosoftcomen-usmagazinecc163302aspx)
bull WCF Bindings In Depth (httpmsdnmicrosoftcomen-
usmagazinecc163394aspx)
bull TechDaysru
bull DotNetCurrycom
bull DevCurrycom
bull Службы WCF Data Services
bull httpmsdnmicrosoftcomru-rulibrarycc668792aspx
Спасибо за внимание
Поведение
Поведение предназначено для модификации и
расширения функциональности сервиса или клиента
Поведение
(Behavior)
[ServiceBehavior(InstanceContextMode =
InstanceContextModeSingleIncludeExceptionDetailInFaults = true)]
public class Service IService
[OperationBehavior(ReleaseInstanceMode =
ReleaseInstanceModeAfterCall)]public DateTime GetCurrentDate()
return DateTimeNow
SingleMultiplePerSessionSingle
Instancing amp Concurrency
Service
InstanceContextMode ConcurrencyMode
PerSession
PerCall
Single
Single
Reentrant
Multiple
Поведение
(Behavior)
Практика
Итоги
bull WCF обобщает все предыдущие технологии меж процессорного
взаимодействия
bull Транспорт HTTP TCP NamedPipes MSMQ Custom
bull Кодировка Text Binary MTOM Custom
bull Поддерживаются сессии гарантия доставки шифрование
транзакции hellip Custom
bull Взаимодействие с сервером прозрачно для клиента
bull Контракт говорит ndash Что
bull Привязка говорит ndash Как
bull Адрес говорит ndash Где
bull Поведение молча манипулирует сервисом
Безопасность
Безопасность
bull Конфиденциальность (confidentiality)
bull Целостность (integrity)
bull Безопасность
o на уровне сообщения
o на уровне транспорта
bull Аутентификация
o Username
o Сертификаты
o Windows
o SAML токены
Режимы безопасности
bull отсутствует (None)
bull на уровне сообщения (Message)
bull на транспортном уровне (Transport)
bull смешанный (TransportWithMessageCredential)
bull двухуровневый (Both)
bull 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-сервис
bull Бинарное сжатие
bull Имперсонацияделегирование
bull Шифрование билетом Kerberos
Windows
Windows
контроллер
домена
Итоги
bull Безопасность по умолчанию включена
bull Безопасность на уровне транспорта и SOAP
сообщения
bull Интероперабельность
bull WS-Security
bull SAML токены
bull Поддержка большинства стандартных сценариев
bull Расширяемость и гибкость
Расширяемость WCF
WCFКлиент Сервис
Proxy DispatcherContract
Channel stackTransactions
Reliability
Security
Encoder
Transport
Channel stackTransactions
Reliability
Security
Encoder
TransportAddress
Binding
Расширяемость прокси-клиента
Метод 1 Метод 2
ClientOperation ClientOperation
ClientRuntime
hellipEncoderTransport
ОбъектыОбъекты
Сообщение
1
2
3
Проверка
параметров1
Формирование
сообщения
(сериализация)2
Проверка
сообщения3
Channel stack
Расширяемость диспетчера
Операция 1 Операция 2
DispatchOperation DispatchOperation
DispatchRuntime
hellipEncoderTransport
5
3
2
Channel stack
1
4
1 Проверка
сообщения
2 Выбор операции
Формирование
объекта
(десериализация)
3
4
Вызов
операции5
Проверка
параметров
ОбъектыОбъекты
Сообщение
Интерфейсы расширений
Этап Интерфейс перехватчика Описание
Проверка
параметровIParameterInspector
Используется до и после вызова
для проверки и изменения
значений параметров
Форматирование
сообщений
IDispatchMessageFormatter
IClientFormatter
Используется для сериализации и
десериализации
Проверка
сообщений
IDispatchMessageInspector
IClientMessageInspector
Используется до отправки и после
получения для проверки и замены
содержимого сообщений
Выбор операцийIDispatchOperationSelector
IClientOperationSelector
Используется для выбора
вызываемой операции для
определенного сообщения
Вызов операции IOperationInvokerИспользуется для вызова
операции
Клиент Сервис
Клиент Сервис
Клиент Сервис
Клиент Сервис
Сервис
Интерфейсы расширений
bull IInstanceProvider GetInstance(InstanceContext)
ReleaseInstance(InstanceContext Instance)
bull IErrorHandlerbull HandleError(Exception) bool
bull ProvideFault(Exception MessageVersion ref Message)
Поведение
bull Это особый тип класса расширяющий поведение серверной или
клиентской среды выполнения
bull Поведения применяются к классам ServiceHost на сервере и
ChannelFactory на клиенте
bull 4 типа пользовательских поведений
Сервис (IServiceBehavior)
Конечная точка (IEndpointBehavior)
Контракт (IContractBehavior)
Операция (IOperationBehavior)
bull IBehavior
bull Validate
bull AddBindingParameters
bull ApplyDispatchBehavior
bull ApplyClientBehavior
Уровни влияния поведений
Контекст Интерфейс Влияние
Service Endpoint Contract Operation
Service IServiceBehavior
Endpoint IEndpointBehavior
Contract IContractBehavior
Operation IOperationBehavior
Практика
WCF 40 Whatrsquos new
WCF 40
bull WCF
bull Activation Service
bull Routing Service
bull WS-Discovery
bull Standard Endpoints
bull HTTP Decompression on Client (Gzip)
bull WCF REST
bull Caching
bull Auto select format
Обнаружение WCF
Клиент СервисСервис
Discovery
Request
Discovery
Endpoint
Discovery
Response
СервисСервис
Discovery
Endpoint
Discovery
Response
Discovery
Request
Discovery
Endpoint
Discovery
Response
Сервис
Оповещение ONOFF
Announcements
Endpoint
Сервис
HelloBye
СервисСервис
HelloBye
Discovery
Endpoint
Клиент
Сделаем сервис обнажаемымbull Программная реализация
bull Либо в конфигеltservicesgt
ltservice name = MyServicegtltendpoint kind=udpDiscoveryEndpoint gt
ltservicegtltservicesgtltbehaviorsgtltserviceBehaviorsgtltbehaviorgt
ltserviceDiscoverygtltbehaviorgt
ltserviceBehaviorsgtltbehaviorsgt
ServiceHost host = new ServiceHost()hostAddServiceEndpoint(new UdpDiscoveryEndpoint()) var discovery = new ServiceDiscoveryBehavior() hostDescriptionBehaviorsAdd(discovery)hostOpen()
kindbull UdpDiscoveryEndpoint
bull UpdAnnouncementEndpoint
bull DynamicEndpoint
Давайте найдем сервис
var discoveryClient =new DiscoveryClient(new UdpDiscoveryEndpoint())
FindCriteria criteria = new FindCriteria(typeof(IMyContract)) criteriaMaxResults = 1 FindResponse discovered = discoveryClientFind(criteria) discoveryClientClose()
EndpointAddress address = discoveredEndpoints[0]Address Binding binding = new NetTcpBinding() var factory = new ChannelFactoryltIMyContractgt(binding address)
IMyContract proxy = factoryCreateChannel()proxyMyMethod() ((ICommunicationObject)proxy)Close()
Практика
Publish-Subscribe Pattern
PublisherPubSub
Service
Publish
Announcements
Endpoint
Discovery
Endpoint
Subscriber
HelloBye
Subscriber
Discover
PubSub
Discovery
EndpointDiscover
Subscribers
SOAP vs REST
prevContactIndex++
return Contacts[prevContactIndex]
SOAP ndash это выполнение операции
SOAP
Service
POST ServiceAccessMyService1svc
Host wwwsitecom
SOAPAction GetNextContact
hellip
ltsoapEnvelope xmlnssoap= hellip
hellip
ltsoapEnvelopegt
SOAP
Client
Contact Data
return GetContact(2)
REST ndash это запрос ресурса
REST
Service
GET sitecomMyService1svcContact(2)
REST
Client
Contact Data
Принципы REST
bull Пользователь взаимодействуют с ресурсами которыми может
быть всё что можно поименовать
bull Каждый ресурс имеет свой уникальный идентификатор ndash URI
bull Взаимодействие с ресурсами происходит по средствам HTTP
(команды GET POST PUT и DELETE)
bull Ресурсы описывают себя сами
bull Content-Type Content-Length hellip
bull В ресурсах могут содержатся ссылки на другие ресурсы
Ограничения REST
bull Stateless ndash отсутствие состояния у сервера Вся информация
необходимая для обработки запроса ресурса содержится в
самом запросе
bull Idempotent ndash повторное действие над объектом не
изменяет его
bull Side Effects ndash запрашивая значение объекта по GET не должно
происходить изменение этого или другого объекта
bull HTTP only
Интернет магазин
Клиенты
Клиент 1
Клиент 2
Счет 1
Счет 2
helliphellip
Клиент N
Ресурс URI
Клиенты mysitecomClients
Клиент mysitecomClientsClient
Счет mysitecomClientsClientaccount
hellip hellip
WebGet WebInvoke
bull WebGet ndash связывает метод с HTTP GET запросом
bull WebInvoke ndash все остальные HTTP запросы (POST PUT hellip)
bull UriTemplate ndash шаблон URI для связывания метода с запросом
Практика
OData
Протокол доступа к данным
основанный на REST
архитектуре
Адресация данных
bull Обращение к коллекции объектов
bull httpServicesvcCustomers
bull Обращение к объекту по PK
bull httpServicesvcCustomers(523)
bull Обращение к полю объекта
bull httpServicesvcCustomers(523)Name
bull Обращение к коллекции объектов с сортировкой
bull httpServicesvcCustomers$orderby=Name
bull Обращение к коллекции объектов с фильтрацией
bull httpServicesvcCustomers$filter=Created gt rsquo2008-01-01rsquo
bull Постарничный доступ
bull httpServicesvcCustomers$top=10amp$skip=20
Контроль доступаbull Видимость
bull Управление видимостью на уровне контейнера
объектов
bull Опции Read Query Write
bull Аутентификация
bull Интеграция с hosting-средой
bull ASPNET WCF пользовательская аутентификация
bull Перехватчики (interceptors)
bull Выполняются перед GETPUTPOSTDELETE
bull Включают валидацию и пользовательские
политики безопасности на уровне строк данных
Перехватчики
bull QueryInterceptor
bull ChangeInterceptor
[QueryInterceptor(Orders)]public ExpressionltFuncltOrder boolgtgt OnQueryOrders()
return o =gt oCustomerContactName == HttpContextCurrentUserIdentityName
[ChangeInterceptor(Products)]public void OnChangeProducts(Product product
UpdateOperations operations) if (operations == UpdateOperationsDelete)
throw new DataServiceException(400 Products cannot be deleted)
Конкурентный доступ
bull Optimistic concurrency
bull Интеграция с существующей
HTTP инфраструктурой
GET Customers(1)
200 ETagxx
PUTCustomers(1)
If-Match xx
201 ETagxx
OR
412 ETagxx
Практика
Итогиbull Работа со связанными сущностями
bull Модификация данных (GET POST PUT MERGE
DELETE)
bull Конкурентный доступ
bull Пакетная обработка
bull Сервисные операции
bull Различные источники данных
bull Безопасность ограничение видимости
bull Перехватчики
bull Различное представление данных
bull Клиентские прокси (NET PHP Java)
Все выше сказанное честно позаимствовано тут
bull MSDN Magazine
bull Extending WCF with Custom Behaviors
(httpmsdnmicrosoftcomen-usmagazinecc163302aspx)
bull WCF Bindings In Depth (httpmsdnmicrosoftcomen-
usmagazinecc163394aspx)
bull TechDaysru
bull DotNetCurrycom
bull DevCurrycom
bull Службы WCF Data Services
bull httpmsdnmicrosoftcomru-rulibrarycc668792aspx
Спасибо за внимание
SingleMultiplePerSessionSingle
Instancing amp Concurrency
Service
InstanceContextMode ConcurrencyMode
PerSession
PerCall
Single
Single
Reentrant
Multiple
Поведение
(Behavior)
Практика
Итоги
bull WCF обобщает все предыдущие технологии меж процессорного
взаимодействия
bull Транспорт HTTP TCP NamedPipes MSMQ Custom
bull Кодировка Text Binary MTOM Custom
bull Поддерживаются сессии гарантия доставки шифрование
транзакции hellip Custom
bull Взаимодействие с сервером прозрачно для клиента
bull Контракт говорит ndash Что
bull Привязка говорит ndash Как
bull Адрес говорит ndash Где
bull Поведение молча манипулирует сервисом
Безопасность
Безопасность
bull Конфиденциальность (confidentiality)
bull Целостность (integrity)
bull Безопасность
o на уровне сообщения
o на уровне транспорта
bull Аутентификация
o Username
o Сертификаты
o Windows
o SAML токены
Режимы безопасности
bull отсутствует (None)
bull на уровне сообщения (Message)
bull на транспортном уровне (Transport)
bull смешанный (TransportWithMessageCredential)
bull двухуровневый (Both)
bull 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-сервис
bull Бинарное сжатие
bull Имперсонацияделегирование
bull Шифрование билетом Kerberos
Windows
Windows
контроллер
домена
Итоги
bull Безопасность по умолчанию включена
bull Безопасность на уровне транспорта и SOAP
сообщения
bull Интероперабельность
bull WS-Security
bull SAML токены
bull Поддержка большинства стандартных сценариев
bull Расширяемость и гибкость
Расширяемость WCF
WCFКлиент Сервис
Proxy DispatcherContract
Channel stackTransactions
Reliability
Security
Encoder
Transport
Channel stackTransactions
Reliability
Security
Encoder
TransportAddress
Binding
Расширяемость прокси-клиента
Метод 1 Метод 2
ClientOperation ClientOperation
ClientRuntime
hellipEncoderTransport
ОбъектыОбъекты
Сообщение
1
2
3
Проверка
параметров1
Формирование
сообщения
(сериализация)2
Проверка
сообщения3
Channel stack
Расширяемость диспетчера
Операция 1 Операция 2
DispatchOperation DispatchOperation
DispatchRuntime
hellipEncoderTransport
5
3
2
Channel stack
1
4
1 Проверка
сообщения
2 Выбор операции
Формирование
объекта
(десериализация)
3
4
Вызов
операции5
Проверка
параметров
ОбъектыОбъекты
Сообщение
Интерфейсы расширений
Этап Интерфейс перехватчика Описание
Проверка
параметровIParameterInspector
Используется до и после вызова
для проверки и изменения
значений параметров
Форматирование
сообщений
IDispatchMessageFormatter
IClientFormatter
Используется для сериализации и
десериализации
Проверка
сообщений
IDispatchMessageInspector
IClientMessageInspector
Используется до отправки и после
получения для проверки и замены
содержимого сообщений
Выбор операцийIDispatchOperationSelector
IClientOperationSelector
Используется для выбора
вызываемой операции для
определенного сообщения
Вызов операции IOperationInvokerИспользуется для вызова
операции
Клиент Сервис
Клиент Сервис
Клиент Сервис
Клиент Сервис
Сервис
Интерфейсы расширений
bull IInstanceProvider GetInstance(InstanceContext)
ReleaseInstance(InstanceContext Instance)
bull IErrorHandlerbull HandleError(Exception) bool
bull ProvideFault(Exception MessageVersion ref Message)
Поведение
bull Это особый тип класса расширяющий поведение серверной или
клиентской среды выполнения
bull Поведения применяются к классам ServiceHost на сервере и
ChannelFactory на клиенте
bull 4 типа пользовательских поведений
Сервис (IServiceBehavior)
Конечная точка (IEndpointBehavior)
Контракт (IContractBehavior)
Операция (IOperationBehavior)
bull IBehavior
bull Validate
bull AddBindingParameters
bull ApplyDispatchBehavior
bull ApplyClientBehavior
Уровни влияния поведений
Контекст Интерфейс Влияние
Service Endpoint Contract Operation
Service IServiceBehavior
Endpoint IEndpointBehavior
Contract IContractBehavior
Operation IOperationBehavior
Практика
WCF 40 Whatrsquos new
WCF 40
bull WCF
bull Activation Service
bull Routing Service
bull WS-Discovery
bull Standard Endpoints
bull HTTP Decompression on Client (Gzip)
bull WCF REST
bull Caching
bull Auto select format
Обнаружение WCF
Клиент СервисСервис
Discovery
Request
Discovery
Endpoint
Discovery
Response
СервисСервис
Discovery
Endpoint
Discovery
Response
Discovery
Request
Discovery
Endpoint
Discovery
Response
Сервис
Оповещение ONOFF
Announcements
Endpoint
Сервис
HelloBye
СервисСервис
HelloBye
Discovery
Endpoint
Клиент
Сделаем сервис обнажаемымbull Программная реализация
bull Либо в конфигеltservicesgt
ltservice name = MyServicegtltendpoint kind=udpDiscoveryEndpoint gt
ltservicegtltservicesgtltbehaviorsgtltserviceBehaviorsgtltbehaviorgt
ltserviceDiscoverygtltbehaviorgt
ltserviceBehaviorsgtltbehaviorsgt
ServiceHost host = new ServiceHost()hostAddServiceEndpoint(new UdpDiscoveryEndpoint()) var discovery = new ServiceDiscoveryBehavior() hostDescriptionBehaviorsAdd(discovery)hostOpen()
kindbull UdpDiscoveryEndpoint
bull UpdAnnouncementEndpoint
bull DynamicEndpoint
Давайте найдем сервис
var discoveryClient =new DiscoveryClient(new UdpDiscoveryEndpoint())
FindCriteria criteria = new FindCriteria(typeof(IMyContract)) criteriaMaxResults = 1 FindResponse discovered = discoveryClientFind(criteria) discoveryClientClose()
EndpointAddress address = discoveredEndpoints[0]Address Binding binding = new NetTcpBinding() var factory = new ChannelFactoryltIMyContractgt(binding address)
IMyContract proxy = factoryCreateChannel()proxyMyMethod() ((ICommunicationObject)proxy)Close()
Практика
Publish-Subscribe Pattern
PublisherPubSub
Service
Publish
Announcements
Endpoint
Discovery
Endpoint
Subscriber
HelloBye
Subscriber
Discover
PubSub
Discovery
EndpointDiscover
Subscribers
SOAP vs REST
prevContactIndex++
return Contacts[prevContactIndex]
SOAP ndash это выполнение операции
SOAP
Service
POST ServiceAccessMyService1svc
Host wwwsitecom
SOAPAction GetNextContact
hellip
ltsoapEnvelope xmlnssoap= hellip
hellip
ltsoapEnvelopegt
SOAP
Client
Contact Data
return GetContact(2)
REST ndash это запрос ресурса
REST
Service
GET sitecomMyService1svcContact(2)
REST
Client
Contact Data
Принципы REST
bull Пользователь взаимодействуют с ресурсами которыми может
быть всё что можно поименовать
bull Каждый ресурс имеет свой уникальный идентификатор ndash URI
bull Взаимодействие с ресурсами происходит по средствам HTTP
(команды GET POST PUT и DELETE)
bull Ресурсы описывают себя сами
bull Content-Type Content-Length hellip
bull В ресурсах могут содержатся ссылки на другие ресурсы
Ограничения REST
bull Stateless ndash отсутствие состояния у сервера Вся информация
необходимая для обработки запроса ресурса содержится в
самом запросе
bull Idempotent ndash повторное действие над объектом не
изменяет его
bull Side Effects ndash запрашивая значение объекта по GET не должно
происходить изменение этого или другого объекта
bull HTTP only
Интернет магазин
Клиенты
Клиент 1
Клиент 2
Счет 1
Счет 2
helliphellip
Клиент N
Ресурс URI
Клиенты mysitecomClients
Клиент mysitecomClientsClient
Счет mysitecomClientsClientaccount
hellip hellip
WebGet WebInvoke
bull WebGet ndash связывает метод с HTTP GET запросом
bull WebInvoke ndash все остальные HTTP запросы (POST PUT hellip)
bull UriTemplate ndash шаблон URI для связывания метода с запросом
Практика
OData
Протокол доступа к данным
основанный на REST
архитектуре
Адресация данных
bull Обращение к коллекции объектов
bull httpServicesvcCustomers
bull Обращение к объекту по PK
bull httpServicesvcCustomers(523)
bull Обращение к полю объекта
bull httpServicesvcCustomers(523)Name
bull Обращение к коллекции объектов с сортировкой
bull httpServicesvcCustomers$orderby=Name
bull Обращение к коллекции объектов с фильтрацией
bull httpServicesvcCustomers$filter=Created gt rsquo2008-01-01rsquo
bull Постарничный доступ
bull httpServicesvcCustomers$top=10amp$skip=20
Контроль доступаbull Видимость
bull Управление видимостью на уровне контейнера
объектов
bull Опции Read Query Write
bull Аутентификация
bull Интеграция с hosting-средой
bull ASPNET WCF пользовательская аутентификация
bull Перехватчики (interceptors)
bull Выполняются перед GETPUTPOSTDELETE
bull Включают валидацию и пользовательские
политики безопасности на уровне строк данных
Перехватчики
bull QueryInterceptor
bull ChangeInterceptor
[QueryInterceptor(Orders)]public ExpressionltFuncltOrder boolgtgt OnQueryOrders()
return o =gt oCustomerContactName == HttpContextCurrentUserIdentityName
[ChangeInterceptor(Products)]public void OnChangeProducts(Product product
UpdateOperations operations) if (operations == UpdateOperationsDelete)
throw new DataServiceException(400 Products cannot be deleted)
Конкурентный доступ
bull Optimistic concurrency
bull Интеграция с существующей
HTTP инфраструктурой
GET Customers(1)
200 ETagxx
PUTCustomers(1)
If-Match xx
201 ETagxx
OR
412 ETagxx
Практика
Итогиbull Работа со связанными сущностями
bull Модификация данных (GET POST PUT MERGE
DELETE)
bull Конкурентный доступ
bull Пакетная обработка
bull Сервисные операции
bull Различные источники данных
bull Безопасность ограничение видимости
bull Перехватчики
bull Различное представление данных
bull Клиентские прокси (NET PHP Java)
Все выше сказанное честно позаимствовано тут
bull MSDN Magazine
bull Extending WCF with Custom Behaviors
(httpmsdnmicrosoftcomen-usmagazinecc163302aspx)
bull WCF Bindings In Depth (httpmsdnmicrosoftcomen-
usmagazinecc163394aspx)
bull TechDaysru
bull DotNetCurrycom
bull DevCurrycom
bull Службы WCF Data Services
bull httpmsdnmicrosoftcomru-rulibrarycc668792aspx
Спасибо за внимание
Практика
Итоги
bull WCF обобщает все предыдущие технологии меж процессорного
взаимодействия
bull Транспорт HTTP TCP NamedPipes MSMQ Custom
bull Кодировка Text Binary MTOM Custom
bull Поддерживаются сессии гарантия доставки шифрование
транзакции hellip Custom
bull Взаимодействие с сервером прозрачно для клиента
bull Контракт говорит ndash Что
bull Привязка говорит ndash Как
bull Адрес говорит ndash Где
bull Поведение молча манипулирует сервисом
Безопасность
Безопасность
bull Конфиденциальность (confidentiality)
bull Целостность (integrity)
bull Безопасность
o на уровне сообщения
o на уровне транспорта
bull Аутентификация
o Username
o Сертификаты
o Windows
o SAML токены
Режимы безопасности
bull отсутствует (None)
bull на уровне сообщения (Message)
bull на транспортном уровне (Transport)
bull смешанный (TransportWithMessageCredential)
bull двухуровневый (Both)
bull 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-сервис
bull Бинарное сжатие
bull Имперсонацияделегирование
bull Шифрование билетом Kerberos
Windows
Windows
контроллер
домена
Итоги
bull Безопасность по умолчанию включена
bull Безопасность на уровне транспорта и SOAP
сообщения
bull Интероперабельность
bull WS-Security
bull SAML токены
bull Поддержка большинства стандартных сценариев
bull Расширяемость и гибкость
Расширяемость WCF
WCFКлиент Сервис
Proxy DispatcherContract
Channel stackTransactions
Reliability
Security
Encoder
Transport
Channel stackTransactions
Reliability
Security
Encoder
TransportAddress
Binding
Расширяемость прокси-клиента
Метод 1 Метод 2
ClientOperation ClientOperation
ClientRuntime
hellipEncoderTransport
ОбъектыОбъекты
Сообщение
1
2
3
Проверка
параметров1
Формирование
сообщения
(сериализация)2
Проверка
сообщения3
Channel stack
Расширяемость диспетчера
Операция 1 Операция 2
DispatchOperation DispatchOperation
DispatchRuntime
hellipEncoderTransport
5
3
2
Channel stack
1
4
1 Проверка
сообщения
2 Выбор операции
Формирование
объекта
(десериализация)
3
4
Вызов
операции5
Проверка
параметров
ОбъектыОбъекты
Сообщение
Интерфейсы расширений
Этап Интерфейс перехватчика Описание
Проверка
параметровIParameterInspector
Используется до и после вызова
для проверки и изменения
значений параметров
Форматирование
сообщений
IDispatchMessageFormatter
IClientFormatter
Используется для сериализации и
десериализации
Проверка
сообщений
IDispatchMessageInspector
IClientMessageInspector
Используется до отправки и после
получения для проверки и замены
содержимого сообщений
Выбор операцийIDispatchOperationSelector
IClientOperationSelector
Используется для выбора
вызываемой операции для
определенного сообщения
Вызов операции IOperationInvokerИспользуется для вызова
операции
Клиент Сервис
Клиент Сервис
Клиент Сервис
Клиент Сервис
Сервис
Интерфейсы расширений
bull IInstanceProvider GetInstance(InstanceContext)
ReleaseInstance(InstanceContext Instance)
bull IErrorHandlerbull HandleError(Exception) bool
bull ProvideFault(Exception MessageVersion ref Message)
Поведение
bull Это особый тип класса расширяющий поведение серверной или
клиентской среды выполнения
bull Поведения применяются к классам ServiceHost на сервере и
ChannelFactory на клиенте
bull 4 типа пользовательских поведений
Сервис (IServiceBehavior)
Конечная точка (IEndpointBehavior)
Контракт (IContractBehavior)
Операция (IOperationBehavior)
bull IBehavior
bull Validate
bull AddBindingParameters
bull ApplyDispatchBehavior
bull ApplyClientBehavior
Уровни влияния поведений
Контекст Интерфейс Влияние
Service Endpoint Contract Operation
Service IServiceBehavior
Endpoint IEndpointBehavior
Contract IContractBehavior
Operation IOperationBehavior
Практика
WCF 40 Whatrsquos new
WCF 40
bull WCF
bull Activation Service
bull Routing Service
bull WS-Discovery
bull Standard Endpoints
bull HTTP Decompression on Client (Gzip)
bull WCF REST
bull Caching
bull Auto select format
Обнаружение WCF
Клиент СервисСервис
Discovery
Request
Discovery
Endpoint
Discovery
Response
СервисСервис
Discovery
Endpoint
Discovery
Response
Discovery
Request
Discovery
Endpoint
Discovery
Response
Сервис
Оповещение ONOFF
Announcements
Endpoint
Сервис
HelloBye
СервисСервис
HelloBye
Discovery
Endpoint
Клиент
Сделаем сервис обнажаемымbull Программная реализация
bull Либо в конфигеltservicesgt
ltservice name = MyServicegtltendpoint kind=udpDiscoveryEndpoint gt
ltservicegtltservicesgtltbehaviorsgtltserviceBehaviorsgtltbehaviorgt
ltserviceDiscoverygtltbehaviorgt
ltserviceBehaviorsgtltbehaviorsgt
ServiceHost host = new ServiceHost()hostAddServiceEndpoint(new UdpDiscoveryEndpoint()) var discovery = new ServiceDiscoveryBehavior() hostDescriptionBehaviorsAdd(discovery)hostOpen()
kindbull UdpDiscoveryEndpoint
bull UpdAnnouncementEndpoint
bull DynamicEndpoint
Давайте найдем сервис
var discoveryClient =new DiscoveryClient(new UdpDiscoveryEndpoint())
FindCriteria criteria = new FindCriteria(typeof(IMyContract)) criteriaMaxResults = 1 FindResponse discovered = discoveryClientFind(criteria) discoveryClientClose()
EndpointAddress address = discoveredEndpoints[0]Address Binding binding = new NetTcpBinding() var factory = new ChannelFactoryltIMyContractgt(binding address)
IMyContract proxy = factoryCreateChannel()proxyMyMethod() ((ICommunicationObject)proxy)Close()
Практика
Publish-Subscribe Pattern
PublisherPubSub
Service
Publish
Announcements
Endpoint
Discovery
Endpoint
Subscriber
HelloBye
Subscriber
Discover
PubSub
Discovery
EndpointDiscover
Subscribers
SOAP vs REST
prevContactIndex++
return Contacts[prevContactIndex]
SOAP ndash это выполнение операции
SOAP
Service
POST ServiceAccessMyService1svc
Host wwwsitecom
SOAPAction GetNextContact
hellip
ltsoapEnvelope xmlnssoap= hellip
hellip
ltsoapEnvelopegt
SOAP
Client
Contact Data
return GetContact(2)
REST ndash это запрос ресурса
REST
Service
GET sitecomMyService1svcContact(2)
REST
Client
Contact Data
Принципы REST
bull Пользователь взаимодействуют с ресурсами которыми может
быть всё что можно поименовать
bull Каждый ресурс имеет свой уникальный идентификатор ndash URI
bull Взаимодействие с ресурсами происходит по средствам HTTP
(команды GET POST PUT и DELETE)
bull Ресурсы описывают себя сами
bull Content-Type Content-Length hellip
bull В ресурсах могут содержатся ссылки на другие ресурсы
Ограничения REST
bull Stateless ndash отсутствие состояния у сервера Вся информация
необходимая для обработки запроса ресурса содержится в
самом запросе
bull Idempotent ndash повторное действие над объектом не
изменяет его
bull Side Effects ndash запрашивая значение объекта по GET не должно
происходить изменение этого или другого объекта
bull HTTP only
Интернет магазин
Клиенты
Клиент 1
Клиент 2
Счет 1
Счет 2
helliphellip
Клиент N
Ресурс URI
Клиенты mysitecomClients
Клиент mysitecomClientsClient
Счет mysitecomClientsClientaccount
hellip hellip
WebGet WebInvoke
bull WebGet ndash связывает метод с HTTP GET запросом
bull WebInvoke ndash все остальные HTTP запросы (POST PUT hellip)
bull UriTemplate ndash шаблон URI для связывания метода с запросом
Практика
OData
Протокол доступа к данным
основанный на REST
архитектуре
Адресация данных
bull Обращение к коллекции объектов
bull httpServicesvcCustomers
bull Обращение к объекту по PK
bull httpServicesvcCustomers(523)
bull Обращение к полю объекта
bull httpServicesvcCustomers(523)Name
bull Обращение к коллекции объектов с сортировкой
bull httpServicesvcCustomers$orderby=Name
bull Обращение к коллекции объектов с фильтрацией
bull httpServicesvcCustomers$filter=Created gt rsquo2008-01-01rsquo
bull Постарничный доступ
bull httpServicesvcCustomers$top=10amp$skip=20
Контроль доступаbull Видимость
bull Управление видимостью на уровне контейнера
объектов
bull Опции Read Query Write
bull Аутентификация
bull Интеграция с hosting-средой
bull ASPNET WCF пользовательская аутентификация
bull Перехватчики (interceptors)
bull Выполняются перед GETPUTPOSTDELETE
bull Включают валидацию и пользовательские
политики безопасности на уровне строк данных
Перехватчики
bull QueryInterceptor
bull ChangeInterceptor
[QueryInterceptor(Orders)]public ExpressionltFuncltOrder boolgtgt OnQueryOrders()
return o =gt oCustomerContactName == HttpContextCurrentUserIdentityName
[ChangeInterceptor(Products)]public void OnChangeProducts(Product product
UpdateOperations operations) if (operations == UpdateOperationsDelete)
throw new DataServiceException(400 Products cannot be deleted)
Конкурентный доступ
bull Optimistic concurrency
bull Интеграция с существующей
HTTP инфраструктурой
GET Customers(1)
200 ETagxx
PUTCustomers(1)
If-Match xx
201 ETagxx
OR
412 ETagxx
Практика
Итогиbull Работа со связанными сущностями
bull Модификация данных (GET POST PUT MERGE
DELETE)
bull Конкурентный доступ
bull Пакетная обработка
bull Сервисные операции
bull Различные источники данных
bull Безопасность ограничение видимости
bull Перехватчики
bull Различное представление данных
bull Клиентские прокси (NET PHP Java)
Все выше сказанное честно позаимствовано тут
bull MSDN Magazine
bull Extending WCF with Custom Behaviors
(httpmsdnmicrosoftcomen-usmagazinecc163302aspx)
bull WCF Bindings In Depth (httpmsdnmicrosoftcomen-
usmagazinecc163394aspx)
bull TechDaysru
bull DotNetCurrycom
bull DevCurrycom
bull Службы WCF Data Services
bull httpmsdnmicrosoftcomru-rulibrarycc668792aspx
Спасибо за внимание
Итоги
bull WCF обобщает все предыдущие технологии меж процессорного
взаимодействия
bull Транспорт HTTP TCP NamedPipes MSMQ Custom
bull Кодировка Text Binary MTOM Custom
bull Поддерживаются сессии гарантия доставки шифрование
транзакции hellip Custom
bull Взаимодействие с сервером прозрачно для клиента
bull Контракт говорит ndash Что
bull Привязка говорит ndash Как
bull Адрес говорит ndash Где
bull Поведение молча манипулирует сервисом
Безопасность
Безопасность
bull Конфиденциальность (confidentiality)
bull Целостность (integrity)
bull Безопасность
o на уровне сообщения
o на уровне транспорта
bull Аутентификация
o Username
o Сертификаты
o Windows
o SAML токены
Режимы безопасности
bull отсутствует (None)
bull на уровне сообщения (Message)
bull на транспортном уровне (Transport)
bull смешанный (TransportWithMessageCredential)
bull двухуровневый (Both)
bull 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-сервис
bull Бинарное сжатие
bull Имперсонацияделегирование
bull Шифрование билетом Kerberos
Windows
Windows
контроллер
домена
Итоги
bull Безопасность по умолчанию включена
bull Безопасность на уровне транспорта и SOAP
сообщения
bull Интероперабельность
bull WS-Security
bull SAML токены
bull Поддержка большинства стандартных сценариев
bull Расширяемость и гибкость
Расширяемость WCF
WCFКлиент Сервис
Proxy DispatcherContract
Channel stackTransactions
Reliability
Security
Encoder
Transport
Channel stackTransactions
Reliability
Security
Encoder
TransportAddress
Binding
Расширяемость прокси-клиента
Метод 1 Метод 2
ClientOperation ClientOperation
ClientRuntime
hellipEncoderTransport
ОбъектыОбъекты
Сообщение
1
2
3
Проверка
параметров1
Формирование
сообщения
(сериализация)2
Проверка
сообщения3
Channel stack
Расширяемость диспетчера
Операция 1 Операция 2
DispatchOperation DispatchOperation
DispatchRuntime
hellipEncoderTransport
5
3
2
Channel stack
1
4
1 Проверка
сообщения
2 Выбор операции
Формирование
объекта
(десериализация)
3
4
Вызов
операции5
Проверка
параметров
ОбъектыОбъекты
Сообщение
Интерфейсы расширений
Этап Интерфейс перехватчика Описание
Проверка
параметровIParameterInspector
Используется до и после вызова
для проверки и изменения
значений параметров
Форматирование
сообщений
IDispatchMessageFormatter
IClientFormatter
Используется для сериализации и
десериализации
Проверка
сообщений
IDispatchMessageInspector
IClientMessageInspector
Используется до отправки и после
получения для проверки и замены
содержимого сообщений
Выбор операцийIDispatchOperationSelector
IClientOperationSelector
Используется для выбора
вызываемой операции для
определенного сообщения
Вызов операции IOperationInvokerИспользуется для вызова
операции
Клиент Сервис
Клиент Сервис
Клиент Сервис
Клиент Сервис
Сервис
Интерфейсы расширений
bull IInstanceProvider GetInstance(InstanceContext)
ReleaseInstance(InstanceContext Instance)
bull IErrorHandlerbull HandleError(Exception) bool
bull ProvideFault(Exception MessageVersion ref Message)
Поведение
bull Это особый тип класса расширяющий поведение серверной или
клиентской среды выполнения
bull Поведения применяются к классам ServiceHost на сервере и
ChannelFactory на клиенте
bull 4 типа пользовательских поведений
Сервис (IServiceBehavior)
Конечная точка (IEndpointBehavior)
Контракт (IContractBehavior)
Операция (IOperationBehavior)
bull IBehavior
bull Validate
bull AddBindingParameters
bull ApplyDispatchBehavior
bull ApplyClientBehavior
Уровни влияния поведений
Контекст Интерфейс Влияние
Service Endpoint Contract Operation
Service IServiceBehavior
Endpoint IEndpointBehavior
Contract IContractBehavior
Operation IOperationBehavior
Практика
WCF 40 Whatrsquos new
WCF 40
bull WCF
bull Activation Service
bull Routing Service
bull WS-Discovery
bull Standard Endpoints
bull HTTP Decompression on Client (Gzip)
bull WCF REST
bull Caching
bull Auto select format
Обнаружение WCF
Клиент СервисСервис
Discovery
Request
Discovery
Endpoint
Discovery
Response
СервисСервис
Discovery
Endpoint
Discovery
Response
Discovery
Request
Discovery
Endpoint
Discovery
Response
Сервис
Оповещение ONOFF
Announcements
Endpoint
Сервис
HelloBye
СервисСервис
HelloBye
Discovery
Endpoint
Клиент
Сделаем сервис обнажаемымbull Программная реализация
bull Либо в конфигеltservicesgt
ltservice name = MyServicegtltendpoint kind=udpDiscoveryEndpoint gt
ltservicegtltservicesgtltbehaviorsgtltserviceBehaviorsgtltbehaviorgt
ltserviceDiscoverygtltbehaviorgt
ltserviceBehaviorsgtltbehaviorsgt
ServiceHost host = new ServiceHost()hostAddServiceEndpoint(new UdpDiscoveryEndpoint()) var discovery = new ServiceDiscoveryBehavior() hostDescriptionBehaviorsAdd(discovery)hostOpen()
kindbull UdpDiscoveryEndpoint
bull UpdAnnouncementEndpoint
bull DynamicEndpoint
Давайте найдем сервис
var discoveryClient =new DiscoveryClient(new UdpDiscoveryEndpoint())
FindCriteria criteria = new FindCriteria(typeof(IMyContract)) criteriaMaxResults = 1 FindResponse discovered = discoveryClientFind(criteria) discoveryClientClose()
EndpointAddress address = discoveredEndpoints[0]Address Binding binding = new NetTcpBinding() var factory = new ChannelFactoryltIMyContractgt(binding address)
IMyContract proxy = factoryCreateChannel()proxyMyMethod() ((ICommunicationObject)proxy)Close()
Практика
Publish-Subscribe Pattern
PublisherPubSub
Service
Publish
Announcements
Endpoint
Discovery
Endpoint
Subscriber
HelloBye
Subscriber
Discover
PubSub
Discovery
EndpointDiscover
Subscribers
SOAP vs REST
prevContactIndex++
return Contacts[prevContactIndex]
SOAP ndash это выполнение операции
SOAP
Service
POST ServiceAccessMyService1svc
Host wwwsitecom
SOAPAction GetNextContact
hellip
ltsoapEnvelope xmlnssoap= hellip
hellip
ltsoapEnvelopegt
SOAP
Client
Contact Data
return GetContact(2)
REST ndash это запрос ресурса
REST
Service
GET sitecomMyService1svcContact(2)
REST
Client
Contact Data
Принципы REST
bull Пользователь взаимодействуют с ресурсами которыми может
быть всё что можно поименовать
bull Каждый ресурс имеет свой уникальный идентификатор ndash URI
bull Взаимодействие с ресурсами происходит по средствам HTTP
(команды GET POST PUT и DELETE)
bull Ресурсы описывают себя сами
bull Content-Type Content-Length hellip
bull В ресурсах могут содержатся ссылки на другие ресурсы
Ограничения REST
bull Stateless ndash отсутствие состояния у сервера Вся информация
необходимая для обработки запроса ресурса содержится в
самом запросе
bull Idempotent ndash повторное действие над объектом не
изменяет его
bull Side Effects ndash запрашивая значение объекта по GET не должно
происходить изменение этого или другого объекта
bull HTTP only
Интернет магазин
Клиенты
Клиент 1
Клиент 2
Счет 1
Счет 2
helliphellip
Клиент N
Ресурс URI
Клиенты mysitecomClients
Клиент mysitecomClientsClient
Счет mysitecomClientsClientaccount
hellip hellip
WebGet WebInvoke
bull WebGet ndash связывает метод с HTTP GET запросом
bull WebInvoke ndash все остальные HTTP запросы (POST PUT hellip)
bull UriTemplate ndash шаблон URI для связывания метода с запросом
Практика
OData
Протокол доступа к данным
основанный на REST
архитектуре
Адресация данных
bull Обращение к коллекции объектов
bull httpServicesvcCustomers
bull Обращение к объекту по PK
bull httpServicesvcCustomers(523)
bull Обращение к полю объекта
bull httpServicesvcCustomers(523)Name
bull Обращение к коллекции объектов с сортировкой
bull httpServicesvcCustomers$orderby=Name
bull Обращение к коллекции объектов с фильтрацией
bull httpServicesvcCustomers$filter=Created gt rsquo2008-01-01rsquo
bull Постарничный доступ
bull httpServicesvcCustomers$top=10amp$skip=20
Контроль доступаbull Видимость
bull Управление видимостью на уровне контейнера
объектов
bull Опции Read Query Write
bull Аутентификация
bull Интеграция с hosting-средой
bull ASPNET WCF пользовательская аутентификация
bull Перехватчики (interceptors)
bull Выполняются перед GETPUTPOSTDELETE
bull Включают валидацию и пользовательские
политики безопасности на уровне строк данных
Перехватчики
bull QueryInterceptor
bull ChangeInterceptor
[QueryInterceptor(Orders)]public ExpressionltFuncltOrder boolgtgt OnQueryOrders()
return o =gt oCustomerContactName == HttpContextCurrentUserIdentityName
[ChangeInterceptor(Products)]public void OnChangeProducts(Product product
UpdateOperations operations) if (operations == UpdateOperationsDelete)
throw new DataServiceException(400 Products cannot be deleted)
Конкурентный доступ
bull Optimistic concurrency
bull Интеграция с существующей
HTTP инфраструктурой
GET Customers(1)
200 ETagxx
PUTCustomers(1)
If-Match xx
201 ETagxx
OR
412 ETagxx
Практика
Итогиbull Работа со связанными сущностями
bull Модификация данных (GET POST PUT MERGE
DELETE)
bull Конкурентный доступ
bull Пакетная обработка
bull Сервисные операции
bull Различные источники данных
bull Безопасность ограничение видимости
bull Перехватчики
bull Различное представление данных
bull Клиентские прокси (NET PHP Java)
Все выше сказанное честно позаимствовано тут
bull MSDN Magazine
bull Extending WCF with Custom Behaviors
(httpmsdnmicrosoftcomen-usmagazinecc163302aspx)
bull WCF Bindings In Depth (httpmsdnmicrosoftcomen-
usmagazinecc163394aspx)
bull TechDaysru
bull DotNetCurrycom
bull DevCurrycom
bull Службы WCF Data Services
bull httpmsdnmicrosoftcomru-rulibrarycc668792aspx
Спасибо за внимание
Безопасность
Безопасность
bull Конфиденциальность (confidentiality)
bull Целостность (integrity)
bull Безопасность
o на уровне сообщения
o на уровне транспорта
bull Аутентификация
o Username
o Сертификаты
o Windows
o SAML токены
Режимы безопасности
bull отсутствует (None)
bull на уровне сообщения (Message)
bull на транспортном уровне (Transport)
bull смешанный (TransportWithMessageCredential)
bull двухуровневый (Both)
bull 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-сервис
bull Бинарное сжатие
bull Имперсонацияделегирование
bull Шифрование билетом Kerberos
Windows
Windows
контроллер
домена
Итоги
bull Безопасность по умолчанию включена
bull Безопасность на уровне транспорта и SOAP
сообщения
bull Интероперабельность
bull WS-Security
bull SAML токены
bull Поддержка большинства стандартных сценариев
bull Расширяемость и гибкость
Расширяемость WCF
WCFКлиент Сервис
Proxy DispatcherContract
Channel stackTransactions
Reliability
Security
Encoder
Transport
Channel stackTransactions
Reliability
Security
Encoder
TransportAddress
Binding
Расширяемость прокси-клиента
Метод 1 Метод 2
ClientOperation ClientOperation
ClientRuntime
hellipEncoderTransport
ОбъектыОбъекты
Сообщение
1
2
3
Проверка
параметров1
Формирование
сообщения
(сериализация)2
Проверка
сообщения3
Channel stack
Расширяемость диспетчера
Операция 1 Операция 2
DispatchOperation DispatchOperation
DispatchRuntime
hellipEncoderTransport
5
3
2
Channel stack
1
4
1 Проверка
сообщения
2 Выбор операции
Формирование
объекта
(десериализация)
3
4
Вызов
операции5
Проверка
параметров
ОбъектыОбъекты
Сообщение
Интерфейсы расширений
Этап Интерфейс перехватчика Описание
Проверка
параметровIParameterInspector
Используется до и после вызова
для проверки и изменения
значений параметров
Форматирование
сообщений
IDispatchMessageFormatter
IClientFormatter
Используется для сериализации и
десериализации
Проверка
сообщений
IDispatchMessageInspector
IClientMessageInspector
Используется до отправки и после
получения для проверки и замены
содержимого сообщений
Выбор операцийIDispatchOperationSelector
IClientOperationSelector
Используется для выбора
вызываемой операции для
определенного сообщения
Вызов операции IOperationInvokerИспользуется для вызова
операции
Клиент Сервис
Клиент Сервис
Клиент Сервис
Клиент Сервис
Сервис
Интерфейсы расширений
bull IInstanceProvider GetInstance(InstanceContext)
ReleaseInstance(InstanceContext Instance)
bull IErrorHandlerbull HandleError(Exception) bool
bull ProvideFault(Exception MessageVersion ref Message)
Поведение
bull Это особый тип класса расширяющий поведение серверной или
клиентской среды выполнения
bull Поведения применяются к классам ServiceHost на сервере и
ChannelFactory на клиенте
bull 4 типа пользовательских поведений
Сервис (IServiceBehavior)
Конечная точка (IEndpointBehavior)
Контракт (IContractBehavior)
Операция (IOperationBehavior)
bull IBehavior
bull Validate
bull AddBindingParameters
bull ApplyDispatchBehavior
bull ApplyClientBehavior
Уровни влияния поведений
Контекст Интерфейс Влияние
Service Endpoint Contract Operation
Service IServiceBehavior
Endpoint IEndpointBehavior
Contract IContractBehavior
Operation IOperationBehavior
Практика
WCF 40 Whatrsquos new
WCF 40
bull WCF
bull Activation Service
bull Routing Service
bull WS-Discovery
bull Standard Endpoints
bull HTTP Decompression on Client (Gzip)
bull WCF REST
bull Caching
bull Auto select format
Обнаружение WCF
Клиент СервисСервис
Discovery
Request
Discovery
Endpoint
Discovery
Response
СервисСервис
Discovery
Endpoint
Discovery
Response
Discovery
Request
Discovery
Endpoint
Discovery
Response
Сервис
Оповещение ONOFF
Announcements
Endpoint
Сервис
HelloBye
СервисСервис
HelloBye
Discovery
Endpoint
Клиент
Сделаем сервис обнажаемымbull Программная реализация
bull Либо в конфигеltservicesgt
ltservice name = MyServicegtltendpoint kind=udpDiscoveryEndpoint gt
ltservicegtltservicesgtltbehaviorsgtltserviceBehaviorsgtltbehaviorgt
ltserviceDiscoverygtltbehaviorgt
ltserviceBehaviorsgtltbehaviorsgt
ServiceHost host = new ServiceHost()hostAddServiceEndpoint(new UdpDiscoveryEndpoint()) var discovery = new ServiceDiscoveryBehavior() hostDescriptionBehaviorsAdd(discovery)hostOpen()
kindbull UdpDiscoveryEndpoint
bull UpdAnnouncementEndpoint
bull DynamicEndpoint
Давайте найдем сервис
var discoveryClient =new DiscoveryClient(new UdpDiscoveryEndpoint())
FindCriteria criteria = new FindCriteria(typeof(IMyContract)) criteriaMaxResults = 1 FindResponse discovered = discoveryClientFind(criteria) discoveryClientClose()
EndpointAddress address = discoveredEndpoints[0]Address Binding binding = new NetTcpBinding() var factory = new ChannelFactoryltIMyContractgt(binding address)
IMyContract proxy = factoryCreateChannel()proxyMyMethod() ((ICommunicationObject)proxy)Close()
Практика
Publish-Subscribe Pattern
PublisherPubSub
Service
Publish
Announcements
Endpoint
Discovery
Endpoint
Subscriber
HelloBye
Subscriber
Discover
PubSub
Discovery
EndpointDiscover
Subscribers
SOAP vs REST
prevContactIndex++
return Contacts[prevContactIndex]
SOAP ndash это выполнение операции
SOAP
Service
POST ServiceAccessMyService1svc
Host wwwsitecom
SOAPAction GetNextContact
hellip
ltsoapEnvelope xmlnssoap= hellip
hellip
ltsoapEnvelopegt
SOAP
Client
Contact Data
return GetContact(2)
REST ndash это запрос ресурса
REST
Service
GET sitecomMyService1svcContact(2)
REST
Client
Contact Data
Принципы REST
bull Пользователь взаимодействуют с ресурсами которыми может
быть всё что можно поименовать
bull Каждый ресурс имеет свой уникальный идентификатор ndash URI
bull Взаимодействие с ресурсами происходит по средствам HTTP
(команды GET POST PUT и DELETE)
bull Ресурсы описывают себя сами
bull Content-Type Content-Length hellip
bull В ресурсах могут содержатся ссылки на другие ресурсы
Ограничения REST
bull Stateless ndash отсутствие состояния у сервера Вся информация
необходимая для обработки запроса ресурса содержится в
самом запросе
bull Idempotent ndash повторное действие над объектом не
изменяет его
bull Side Effects ndash запрашивая значение объекта по GET не должно
происходить изменение этого или другого объекта
bull HTTP only
Интернет магазин
Клиенты
Клиент 1
Клиент 2
Счет 1
Счет 2
helliphellip
Клиент N
Ресурс URI
Клиенты mysitecomClients
Клиент mysitecomClientsClient
Счет mysitecomClientsClientaccount
hellip hellip
WebGet WebInvoke
bull WebGet ndash связывает метод с HTTP GET запросом
bull WebInvoke ndash все остальные HTTP запросы (POST PUT hellip)
bull UriTemplate ndash шаблон URI для связывания метода с запросом
Практика
OData
Протокол доступа к данным
основанный на REST
архитектуре
Адресация данных
bull Обращение к коллекции объектов
bull httpServicesvcCustomers
bull Обращение к объекту по PK
bull httpServicesvcCustomers(523)
bull Обращение к полю объекта
bull httpServicesvcCustomers(523)Name
bull Обращение к коллекции объектов с сортировкой
bull httpServicesvcCustomers$orderby=Name
bull Обращение к коллекции объектов с фильтрацией
bull httpServicesvcCustomers$filter=Created gt rsquo2008-01-01rsquo
bull Постарничный доступ
bull httpServicesvcCustomers$top=10amp$skip=20
Контроль доступаbull Видимость
bull Управление видимостью на уровне контейнера
объектов
bull Опции Read Query Write
bull Аутентификация
bull Интеграция с hosting-средой
bull ASPNET WCF пользовательская аутентификация
bull Перехватчики (interceptors)
bull Выполняются перед GETPUTPOSTDELETE
bull Включают валидацию и пользовательские
политики безопасности на уровне строк данных
Перехватчики
bull QueryInterceptor
bull ChangeInterceptor
[QueryInterceptor(Orders)]public ExpressionltFuncltOrder boolgtgt OnQueryOrders()
return o =gt oCustomerContactName == HttpContextCurrentUserIdentityName
[ChangeInterceptor(Products)]public void OnChangeProducts(Product product
UpdateOperations operations) if (operations == UpdateOperationsDelete)
throw new DataServiceException(400 Products cannot be deleted)
Конкурентный доступ
bull Optimistic concurrency
bull Интеграция с существующей
HTTP инфраструктурой
GET Customers(1)
200 ETagxx
PUTCustomers(1)
If-Match xx
201 ETagxx
OR
412 ETagxx
Практика
Итогиbull Работа со связанными сущностями
bull Модификация данных (GET POST PUT MERGE
DELETE)
bull Конкурентный доступ
bull Пакетная обработка
bull Сервисные операции
bull Различные источники данных
bull Безопасность ограничение видимости
bull Перехватчики
bull Различное представление данных
bull Клиентские прокси (NET PHP Java)
Все выше сказанное честно позаимствовано тут
bull MSDN Magazine
bull Extending WCF with Custom Behaviors
(httpmsdnmicrosoftcomen-usmagazinecc163302aspx)
bull WCF Bindings In Depth (httpmsdnmicrosoftcomen-
usmagazinecc163394aspx)
bull TechDaysru
bull DotNetCurrycom
bull DevCurrycom
bull Службы WCF Data Services
bull httpmsdnmicrosoftcomru-rulibrarycc668792aspx
Спасибо за внимание
Безопасность
bull Конфиденциальность (confidentiality)
bull Целостность (integrity)
bull Безопасность
o на уровне сообщения
o на уровне транспорта
bull Аутентификация
o Username
o Сертификаты
o Windows
o SAML токены
Режимы безопасности
bull отсутствует (None)
bull на уровне сообщения (Message)
bull на транспортном уровне (Transport)
bull смешанный (TransportWithMessageCredential)
bull двухуровневый (Both)
bull 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-сервис
bull Бинарное сжатие
bull Имперсонацияделегирование
bull Шифрование билетом Kerberos
Windows
Windows
контроллер
домена
Итоги
bull Безопасность по умолчанию включена
bull Безопасность на уровне транспорта и SOAP
сообщения
bull Интероперабельность
bull WS-Security
bull SAML токены
bull Поддержка большинства стандартных сценариев
bull Расширяемость и гибкость
Расширяемость WCF
WCFКлиент Сервис
Proxy DispatcherContract
Channel stackTransactions
Reliability
Security
Encoder
Transport
Channel stackTransactions
Reliability
Security
Encoder
TransportAddress
Binding
Расширяемость прокси-клиента
Метод 1 Метод 2
ClientOperation ClientOperation
ClientRuntime
hellipEncoderTransport
ОбъектыОбъекты
Сообщение
1
2
3
Проверка
параметров1
Формирование
сообщения
(сериализация)2
Проверка
сообщения3
Channel stack
Расширяемость диспетчера
Операция 1 Операция 2
DispatchOperation DispatchOperation
DispatchRuntime
hellipEncoderTransport
5
3
2
Channel stack
1
4
1 Проверка
сообщения
2 Выбор операции
Формирование
объекта
(десериализация)
3
4
Вызов
операции5
Проверка
параметров
ОбъектыОбъекты
Сообщение
Интерфейсы расширений
Этап Интерфейс перехватчика Описание
Проверка
параметровIParameterInspector
Используется до и после вызова
для проверки и изменения
значений параметров
Форматирование
сообщений
IDispatchMessageFormatter
IClientFormatter
Используется для сериализации и
десериализации
Проверка
сообщений
IDispatchMessageInspector
IClientMessageInspector
Используется до отправки и после
получения для проверки и замены
содержимого сообщений
Выбор операцийIDispatchOperationSelector
IClientOperationSelector
Используется для выбора
вызываемой операции для
определенного сообщения
Вызов операции IOperationInvokerИспользуется для вызова
операции
Клиент Сервис
Клиент Сервис
Клиент Сервис
Клиент Сервис
Сервис
Интерфейсы расширений
bull IInstanceProvider GetInstance(InstanceContext)
ReleaseInstance(InstanceContext Instance)
bull IErrorHandlerbull HandleError(Exception) bool
bull ProvideFault(Exception MessageVersion ref Message)
Поведение
bull Это особый тип класса расширяющий поведение серверной или
клиентской среды выполнения
bull Поведения применяются к классам ServiceHost на сервере и
ChannelFactory на клиенте
bull 4 типа пользовательских поведений
Сервис (IServiceBehavior)
Конечная точка (IEndpointBehavior)
Контракт (IContractBehavior)
Операция (IOperationBehavior)
bull IBehavior
bull Validate
bull AddBindingParameters
bull ApplyDispatchBehavior
bull ApplyClientBehavior
Уровни влияния поведений
Контекст Интерфейс Влияние
Service Endpoint Contract Operation
Service IServiceBehavior
Endpoint IEndpointBehavior
Contract IContractBehavior
Operation IOperationBehavior
Практика
WCF 40 Whatrsquos new
WCF 40
bull WCF
bull Activation Service
bull Routing Service
bull WS-Discovery
bull Standard Endpoints
bull HTTP Decompression on Client (Gzip)
bull WCF REST
bull Caching
bull Auto select format
Обнаружение WCF
Клиент СервисСервис
Discovery
Request
Discovery
Endpoint
Discovery
Response
СервисСервис
Discovery
Endpoint
Discovery
Response
Discovery
Request
Discovery
Endpoint
Discovery
Response
Сервис
Оповещение ONOFF
Announcements
Endpoint
Сервис
HelloBye
СервисСервис
HelloBye
Discovery
Endpoint
Клиент
Сделаем сервис обнажаемымbull Программная реализация
bull Либо в конфигеltservicesgt
ltservice name = MyServicegtltendpoint kind=udpDiscoveryEndpoint gt
ltservicegtltservicesgtltbehaviorsgtltserviceBehaviorsgtltbehaviorgt
ltserviceDiscoverygtltbehaviorgt
ltserviceBehaviorsgtltbehaviorsgt
ServiceHost host = new ServiceHost()hostAddServiceEndpoint(new UdpDiscoveryEndpoint()) var discovery = new ServiceDiscoveryBehavior() hostDescriptionBehaviorsAdd(discovery)hostOpen()
kindbull UdpDiscoveryEndpoint
bull UpdAnnouncementEndpoint
bull DynamicEndpoint
Давайте найдем сервис
var discoveryClient =new DiscoveryClient(new UdpDiscoveryEndpoint())
FindCriteria criteria = new FindCriteria(typeof(IMyContract)) criteriaMaxResults = 1 FindResponse discovered = discoveryClientFind(criteria) discoveryClientClose()
EndpointAddress address = discoveredEndpoints[0]Address Binding binding = new NetTcpBinding() var factory = new ChannelFactoryltIMyContractgt(binding address)
IMyContract proxy = factoryCreateChannel()proxyMyMethod() ((ICommunicationObject)proxy)Close()
Практика
Publish-Subscribe Pattern
PublisherPubSub
Service
Publish
Announcements
Endpoint
Discovery
Endpoint
Subscriber
HelloBye
Subscriber
Discover
PubSub
Discovery
EndpointDiscover
Subscribers
SOAP vs REST
prevContactIndex++
return Contacts[prevContactIndex]
SOAP ndash это выполнение операции
SOAP
Service
POST ServiceAccessMyService1svc
Host wwwsitecom
SOAPAction GetNextContact
hellip
ltsoapEnvelope xmlnssoap= hellip
hellip
ltsoapEnvelopegt
SOAP
Client
Contact Data
return GetContact(2)
REST ndash это запрос ресурса
REST
Service
GET sitecomMyService1svcContact(2)
REST
Client
Contact Data
Принципы REST
bull Пользователь взаимодействуют с ресурсами которыми может
быть всё что можно поименовать
bull Каждый ресурс имеет свой уникальный идентификатор ndash URI
bull Взаимодействие с ресурсами происходит по средствам HTTP
(команды GET POST PUT и DELETE)
bull Ресурсы описывают себя сами
bull Content-Type Content-Length hellip
bull В ресурсах могут содержатся ссылки на другие ресурсы
Ограничения REST
bull Stateless ndash отсутствие состояния у сервера Вся информация
необходимая для обработки запроса ресурса содержится в
самом запросе
bull Idempotent ndash повторное действие над объектом не
изменяет его
bull Side Effects ndash запрашивая значение объекта по GET не должно
происходить изменение этого или другого объекта
bull HTTP only
Интернет магазин
Клиенты
Клиент 1
Клиент 2
Счет 1
Счет 2
helliphellip
Клиент N
Ресурс URI
Клиенты mysitecomClients
Клиент mysitecomClientsClient
Счет mysitecomClientsClientaccount
hellip hellip
WebGet WebInvoke
bull WebGet ndash связывает метод с HTTP GET запросом
bull WebInvoke ndash все остальные HTTP запросы (POST PUT hellip)
bull UriTemplate ndash шаблон URI для связывания метода с запросом
Практика
OData
Протокол доступа к данным
основанный на REST
архитектуре
Адресация данных
bull Обращение к коллекции объектов
bull httpServicesvcCustomers
bull Обращение к объекту по PK
bull httpServicesvcCustomers(523)
bull Обращение к полю объекта
bull httpServicesvcCustomers(523)Name
bull Обращение к коллекции объектов с сортировкой
bull httpServicesvcCustomers$orderby=Name
bull Обращение к коллекции объектов с фильтрацией
bull httpServicesvcCustomers$filter=Created gt rsquo2008-01-01rsquo
bull Постарничный доступ
bull httpServicesvcCustomers$top=10amp$skip=20
Контроль доступаbull Видимость
bull Управление видимостью на уровне контейнера
объектов
bull Опции Read Query Write
bull Аутентификация
bull Интеграция с hosting-средой
bull ASPNET WCF пользовательская аутентификация
bull Перехватчики (interceptors)
bull Выполняются перед GETPUTPOSTDELETE
bull Включают валидацию и пользовательские
политики безопасности на уровне строк данных
Перехватчики
bull QueryInterceptor
bull ChangeInterceptor
[QueryInterceptor(Orders)]public ExpressionltFuncltOrder boolgtgt OnQueryOrders()
return o =gt oCustomerContactName == HttpContextCurrentUserIdentityName
[ChangeInterceptor(Products)]public void OnChangeProducts(Product product
UpdateOperations operations) if (operations == UpdateOperationsDelete)
throw new DataServiceException(400 Products cannot be deleted)
Конкурентный доступ
bull Optimistic concurrency
bull Интеграция с существующей
HTTP инфраструктурой
GET Customers(1)
200 ETagxx
PUTCustomers(1)
If-Match xx
201 ETagxx
OR
412 ETagxx
Практика
Итогиbull Работа со связанными сущностями
bull Модификация данных (GET POST PUT MERGE
DELETE)
bull Конкурентный доступ
bull Пакетная обработка
bull Сервисные операции
bull Различные источники данных
bull Безопасность ограничение видимости
bull Перехватчики
bull Различное представление данных
bull Клиентские прокси (NET PHP Java)
Все выше сказанное честно позаимствовано тут
bull MSDN Magazine
bull Extending WCF with Custom Behaviors
(httpmsdnmicrosoftcomen-usmagazinecc163302aspx)
bull WCF Bindings In Depth (httpmsdnmicrosoftcomen-
usmagazinecc163394aspx)
bull TechDaysru
bull DotNetCurrycom
bull DevCurrycom
bull Службы WCF Data Services
bull httpmsdnmicrosoftcomru-rulibrarycc668792aspx
Спасибо за внимание
Режимы безопасности
bull отсутствует (None)
bull на уровне сообщения (Message)
bull на транспортном уровне (Transport)
bull смешанный (TransportWithMessageCredential)
bull двухуровневый (Both)
bull 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-сервис
bull Бинарное сжатие
bull Имперсонацияделегирование
bull Шифрование билетом Kerberos
Windows
Windows
контроллер
домена
Итоги
bull Безопасность по умолчанию включена
bull Безопасность на уровне транспорта и SOAP
сообщения
bull Интероперабельность
bull WS-Security
bull SAML токены
bull Поддержка большинства стандартных сценариев
bull Расширяемость и гибкость
Расширяемость WCF
WCFКлиент Сервис
Proxy DispatcherContract
Channel stackTransactions
Reliability
Security
Encoder
Transport
Channel stackTransactions
Reliability
Security
Encoder
TransportAddress
Binding
Расширяемость прокси-клиента
Метод 1 Метод 2
ClientOperation ClientOperation
ClientRuntime
hellipEncoderTransport
ОбъектыОбъекты
Сообщение
1
2
3
Проверка
параметров1
Формирование
сообщения
(сериализация)2
Проверка
сообщения3
Channel stack
Расширяемость диспетчера
Операция 1 Операция 2
DispatchOperation DispatchOperation
DispatchRuntime
hellipEncoderTransport
5
3
2
Channel stack
1
4
1 Проверка
сообщения
2 Выбор операции
Формирование
объекта
(десериализация)
3
4
Вызов
операции5
Проверка
параметров
ОбъектыОбъекты
Сообщение
Интерфейсы расширений
Этап Интерфейс перехватчика Описание
Проверка
параметровIParameterInspector
Используется до и после вызова
для проверки и изменения
значений параметров
Форматирование
сообщений
IDispatchMessageFormatter
IClientFormatter
Используется для сериализации и
десериализации
Проверка
сообщений
IDispatchMessageInspector
IClientMessageInspector
Используется до отправки и после
получения для проверки и замены
содержимого сообщений
Выбор операцийIDispatchOperationSelector
IClientOperationSelector
Используется для выбора
вызываемой операции для
определенного сообщения
Вызов операции IOperationInvokerИспользуется для вызова
операции
Клиент Сервис
Клиент Сервис
Клиент Сервис
Клиент Сервис
Сервис
Интерфейсы расширений
bull IInstanceProvider GetInstance(InstanceContext)
ReleaseInstance(InstanceContext Instance)
bull IErrorHandlerbull HandleError(Exception) bool
bull ProvideFault(Exception MessageVersion ref Message)
Поведение
bull Это особый тип класса расширяющий поведение серверной или
клиентской среды выполнения
bull Поведения применяются к классам ServiceHost на сервере и
ChannelFactory на клиенте
bull 4 типа пользовательских поведений
Сервис (IServiceBehavior)
Конечная точка (IEndpointBehavior)
Контракт (IContractBehavior)
Операция (IOperationBehavior)
bull IBehavior
bull Validate
bull AddBindingParameters
bull ApplyDispatchBehavior
bull ApplyClientBehavior
Уровни влияния поведений
Контекст Интерфейс Влияние
Service Endpoint Contract Operation
Service IServiceBehavior
Endpoint IEndpointBehavior
Contract IContractBehavior
Operation IOperationBehavior
Практика
WCF 40 Whatrsquos new
WCF 40
bull WCF
bull Activation Service
bull Routing Service
bull WS-Discovery
bull Standard Endpoints
bull HTTP Decompression on Client (Gzip)
bull WCF REST
bull Caching
bull Auto select format
Обнаружение WCF
Клиент СервисСервис
Discovery
Request
Discovery
Endpoint
Discovery
Response
СервисСервис
Discovery
Endpoint
Discovery
Response
Discovery
Request
Discovery
Endpoint
Discovery
Response
Сервис
Оповещение ONOFF
Announcements
Endpoint
Сервис
HelloBye
СервисСервис
HelloBye
Discovery
Endpoint
Клиент
Сделаем сервис обнажаемымbull Программная реализация
bull Либо в конфигеltservicesgt
ltservice name = MyServicegtltendpoint kind=udpDiscoveryEndpoint gt
ltservicegtltservicesgtltbehaviorsgtltserviceBehaviorsgtltbehaviorgt
ltserviceDiscoverygtltbehaviorgt
ltserviceBehaviorsgtltbehaviorsgt
ServiceHost host = new ServiceHost()hostAddServiceEndpoint(new UdpDiscoveryEndpoint()) var discovery = new ServiceDiscoveryBehavior() hostDescriptionBehaviorsAdd(discovery)hostOpen()
kindbull UdpDiscoveryEndpoint
bull UpdAnnouncementEndpoint
bull DynamicEndpoint
Давайте найдем сервис
var discoveryClient =new DiscoveryClient(new UdpDiscoveryEndpoint())
FindCriteria criteria = new FindCriteria(typeof(IMyContract)) criteriaMaxResults = 1 FindResponse discovered = discoveryClientFind(criteria) discoveryClientClose()
EndpointAddress address = discoveredEndpoints[0]Address Binding binding = new NetTcpBinding() var factory = new ChannelFactoryltIMyContractgt(binding address)
IMyContract proxy = factoryCreateChannel()proxyMyMethod() ((ICommunicationObject)proxy)Close()
Практика
Publish-Subscribe Pattern
PublisherPubSub
Service
Publish
Announcements
Endpoint
Discovery
Endpoint
Subscriber
HelloBye
Subscriber
Discover
PubSub
Discovery
EndpointDiscover
Subscribers
SOAP vs REST
prevContactIndex++
return Contacts[prevContactIndex]
SOAP ndash это выполнение операции
SOAP
Service
POST ServiceAccessMyService1svc
Host wwwsitecom
SOAPAction GetNextContact
hellip
ltsoapEnvelope xmlnssoap= hellip
hellip
ltsoapEnvelopegt
SOAP
Client
Contact Data
return GetContact(2)
REST ndash это запрос ресурса
REST
Service
GET sitecomMyService1svcContact(2)
REST
Client
Contact Data
Принципы REST
bull Пользователь взаимодействуют с ресурсами которыми может
быть всё что можно поименовать
bull Каждый ресурс имеет свой уникальный идентификатор ndash URI
bull Взаимодействие с ресурсами происходит по средствам HTTP
(команды GET POST PUT и DELETE)
bull Ресурсы описывают себя сами
bull Content-Type Content-Length hellip
bull В ресурсах могут содержатся ссылки на другие ресурсы
Ограничения REST
bull Stateless ndash отсутствие состояния у сервера Вся информация
необходимая для обработки запроса ресурса содержится в
самом запросе
bull Idempotent ndash повторное действие над объектом не
изменяет его
bull Side Effects ndash запрашивая значение объекта по GET не должно
происходить изменение этого или другого объекта
bull HTTP only
Интернет магазин
Клиенты
Клиент 1
Клиент 2
Счет 1
Счет 2
helliphellip
Клиент N
Ресурс URI
Клиенты mysitecomClients
Клиент mysitecomClientsClient
Счет mysitecomClientsClientaccount
hellip hellip
WebGet WebInvoke
bull WebGet ndash связывает метод с HTTP GET запросом
bull WebInvoke ndash все остальные HTTP запросы (POST PUT hellip)
bull UriTemplate ndash шаблон URI для связывания метода с запросом
Практика
OData
Протокол доступа к данным
основанный на REST
архитектуре
Адресация данных
bull Обращение к коллекции объектов
bull httpServicesvcCustomers
bull Обращение к объекту по PK
bull httpServicesvcCustomers(523)
bull Обращение к полю объекта
bull httpServicesvcCustomers(523)Name
bull Обращение к коллекции объектов с сортировкой
bull httpServicesvcCustomers$orderby=Name
bull Обращение к коллекции объектов с фильтрацией
bull httpServicesvcCustomers$filter=Created gt rsquo2008-01-01rsquo
bull Постарничный доступ
bull httpServicesvcCustomers$top=10amp$skip=20
Контроль доступаbull Видимость
bull Управление видимостью на уровне контейнера
объектов
bull Опции Read Query Write
bull Аутентификация
bull Интеграция с hosting-средой
bull ASPNET WCF пользовательская аутентификация
bull Перехватчики (interceptors)
bull Выполняются перед GETPUTPOSTDELETE
bull Включают валидацию и пользовательские
политики безопасности на уровне строк данных
Перехватчики
bull QueryInterceptor
bull ChangeInterceptor
[QueryInterceptor(Orders)]public ExpressionltFuncltOrder boolgtgt OnQueryOrders()
return o =gt oCustomerContactName == HttpContextCurrentUserIdentityName
[ChangeInterceptor(Products)]public void OnChangeProducts(Product product
UpdateOperations operations) if (operations == UpdateOperationsDelete)
throw new DataServiceException(400 Products cannot be deleted)
Конкурентный доступ
bull Optimistic concurrency
bull Интеграция с существующей
HTTP инфраструктурой
GET Customers(1)
200 ETagxx
PUTCustomers(1)
If-Match xx
201 ETagxx
OR
412 ETagxx
Практика
Итогиbull Работа со связанными сущностями
bull Модификация данных (GET POST PUT MERGE
DELETE)
bull Конкурентный доступ
bull Пакетная обработка
bull Сервисные операции
bull Различные источники данных
bull Безопасность ограничение видимости
bull Перехватчики
bull Различное представление данных
bull Клиентские прокси (NET PHP Java)
Все выше сказанное честно позаимствовано тут
bull MSDN Magazine
bull Extending WCF with Custom Behaviors
(httpmsdnmicrosoftcomen-usmagazinecc163302aspx)
bull WCF Bindings In Depth (httpmsdnmicrosoftcomen-
usmagazinecc163394aspx)
bull TechDaysru
bull DotNetCurrycom
bull DevCurrycom
bull Службы WCF Data Services
bull httpmsdnmicrosoftcomru-rulibrarycc668792aspx
Спасибо за внимание
Шифрование транспортаПроизводительность
Аппаратное шифрование
Потоковая передача данных
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-сервис
bull Бинарное сжатие
bull Имперсонацияделегирование
bull Шифрование билетом Kerberos
Windows
Windows
контроллер
домена
Итоги
bull Безопасность по умолчанию включена
bull Безопасность на уровне транспорта и SOAP
сообщения
bull Интероперабельность
bull WS-Security
bull SAML токены
bull Поддержка большинства стандартных сценариев
bull Расширяемость и гибкость
Расширяемость WCF
WCFКлиент Сервис
Proxy DispatcherContract
Channel stackTransactions
Reliability
Security
Encoder
Transport
Channel stackTransactions
Reliability
Security
Encoder
TransportAddress
Binding
Расширяемость прокси-клиента
Метод 1 Метод 2
ClientOperation ClientOperation
ClientRuntime
hellipEncoderTransport
ОбъектыОбъекты
Сообщение
1
2
3
Проверка
параметров1
Формирование
сообщения
(сериализация)2
Проверка
сообщения3
Channel stack
Расширяемость диспетчера
Операция 1 Операция 2
DispatchOperation DispatchOperation
DispatchRuntime
hellipEncoderTransport
5
3
2
Channel stack
1
4
1 Проверка
сообщения
2 Выбор операции
Формирование
объекта
(десериализация)
3
4
Вызов
операции5
Проверка
параметров
ОбъектыОбъекты
Сообщение
Интерфейсы расширений
Этап Интерфейс перехватчика Описание
Проверка
параметровIParameterInspector
Используется до и после вызова
для проверки и изменения
значений параметров
Форматирование
сообщений
IDispatchMessageFormatter
IClientFormatter
Используется для сериализации и
десериализации
Проверка
сообщений
IDispatchMessageInspector
IClientMessageInspector
Используется до отправки и после
получения для проверки и замены
содержимого сообщений
Выбор операцийIDispatchOperationSelector
IClientOperationSelector
Используется для выбора
вызываемой операции для
определенного сообщения
Вызов операции IOperationInvokerИспользуется для вызова
операции
Клиент Сервис
Клиент Сервис
Клиент Сервис
Клиент Сервис
Сервис
Интерфейсы расширений
bull IInstanceProvider GetInstance(InstanceContext)
ReleaseInstance(InstanceContext Instance)
bull IErrorHandlerbull HandleError(Exception) bool
bull ProvideFault(Exception MessageVersion ref Message)
Поведение
bull Это особый тип класса расширяющий поведение серверной или
клиентской среды выполнения
bull Поведения применяются к классам ServiceHost на сервере и
ChannelFactory на клиенте
bull 4 типа пользовательских поведений
Сервис (IServiceBehavior)
Конечная точка (IEndpointBehavior)
Контракт (IContractBehavior)
Операция (IOperationBehavior)
bull IBehavior
bull Validate
bull AddBindingParameters
bull ApplyDispatchBehavior
bull ApplyClientBehavior
Уровни влияния поведений
Контекст Интерфейс Влияние
Service Endpoint Contract Operation
Service IServiceBehavior
Endpoint IEndpointBehavior
Contract IContractBehavior
Operation IOperationBehavior
Практика
WCF 40 Whatrsquos new
WCF 40
bull WCF
bull Activation Service
bull Routing Service
bull WS-Discovery
bull Standard Endpoints
bull HTTP Decompression on Client (Gzip)
bull WCF REST
bull Caching
bull Auto select format
Обнаружение WCF
Клиент СервисСервис
Discovery
Request
Discovery
Endpoint
Discovery
Response
СервисСервис
Discovery
Endpoint
Discovery
Response
Discovery
Request
Discovery
Endpoint
Discovery
Response
Сервис
Оповещение ONOFF
Announcements
Endpoint
Сервис
HelloBye
СервисСервис
HelloBye
Discovery
Endpoint
Клиент
Сделаем сервис обнажаемымbull Программная реализация
bull Либо в конфигеltservicesgt
ltservice name = MyServicegtltendpoint kind=udpDiscoveryEndpoint gt
ltservicegtltservicesgtltbehaviorsgtltserviceBehaviorsgtltbehaviorgt
ltserviceDiscoverygtltbehaviorgt
ltserviceBehaviorsgtltbehaviorsgt
ServiceHost host = new ServiceHost()hostAddServiceEndpoint(new UdpDiscoveryEndpoint()) var discovery = new ServiceDiscoveryBehavior() hostDescriptionBehaviorsAdd(discovery)hostOpen()
kindbull UdpDiscoveryEndpoint
bull UpdAnnouncementEndpoint
bull DynamicEndpoint
Давайте найдем сервис
var discoveryClient =new DiscoveryClient(new UdpDiscoveryEndpoint())
FindCriteria criteria = new FindCriteria(typeof(IMyContract)) criteriaMaxResults = 1 FindResponse discovered = discoveryClientFind(criteria) discoveryClientClose()
EndpointAddress address = discoveredEndpoints[0]Address Binding binding = new NetTcpBinding() var factory = new ChannelFactoryltIMyContractgt(binding address)
IMyContract proxy = factoryCreateChannel()proxyMyMethod() ((ICommunicationObject)proxy)Close()
Практика
Publish-Subscribe Pattern
PublisherPubSub
Service
Publish
Announcements
Endpoint
Discovery
Endpoint
Subscriber
HelloBye
Subscriber
Discover
PubSub
Discovery
EndpointDiscover
Subscribers
SOAP vs REST
prevContactIndex++
return Contacts[prevContactIndex]
SOAP ndash это выполнение операции
SOAP
Service
POST ServiceAccessMyService1svc
Host wwwsitecom
SOAPAction GetNextContact
hellip
ltsoapEnvelope xmlnssoap= hellip
hellip
ltsoapEnvelopegt
SOAP
Client
Contact Data
return GetContact(2)
REST ndash это запрос ресурса
REST
Service
GET sitecomMyService1svcContact(2)
REST
Client
Contact Data
Принципы REST
bull Пользователь взаимодействуют с ресурсами которыми может
быть всё что можно поименовать
bull Каждый ресурс имеет свой уникальный идентификатор ndash URI
bull Взаимодействие с ресурсами происходит по средствам HTTP
(команды GET POST PUT и DELETE)
bull Ресурсы описывают себя сами
bull Content-Type Content-Length hellip
bull В ресурсах могут содержатся ссылки на другие ресурсы
Ограничения REST
bull Stateless ndash отсутствие состояния у сервера Вся информация
необходимая для обработки запроса ресурса содержится в
самом запросе
bull Idempotent ndash повторное действие над объектом не
изменяет его
bull Side Effects ndash запрашивая значение объекта по GET не должно
происходить изменение этого или другого объекта
bull HTTP only
Интернет магазин
Клиенты
Клиент 1
Клиент 2
Счет 1
Счет 2
helliphellip
Клиент N
Ресурс URI
Клиенты mysitecomClients
Клиент mysitecomClientsClient
Счет mysitecomClientsClientaccount
hellip hellip
WebGet WebInvoke
bull WebGet ndash связывает метод с HTTP GET запросом
bull WebInvoke ndash все остальные HTTP запросы (POST PUT hellip)
bull UriTemplate ndash шаблон URI для связывания метода с запросом
Практика
OData
Протокол доступа к данным
основанный на REST
архитектуре
Адресация данных
bull Обращение к коллекции объектов
bull httpServicesvcCustomers
bull Обращение к объекту по PK
bull httpServicesvcCustomers(523)
bull Обращение к полю объекта
bull httpServicesvcCustomers(523)Name
bull Обращение к коллекции объектов с сортировкой
bull httpServicesvcCustomers$orderby=Name
bull Обращение к коллекции объектов с фильтрацией
bull httpServicesvcCustomers$filter=Created gt rsquo2008-01-01rsquo
bull Постарничный доступ
bull httpServicesvcCustomers$top=10amp$skip=20
Контроль доступаbull Видимость
bull Управление видимостью на уровне контейнера
объектов
bull Опции Read Query Write
bull Аутентификация
bull Интеграция с hosting-средой
bull ASPNET WCF пользовательская аутентификация
bull Перехватчики (interceptors)
bull Выполняются перед GETPUTPOSTDELETE
bull Включают валидацию и пользовательские
политики безопасности на уровне строк данных
Перехватчики
bull QueryInterceptor
bull ChangeInterceptor
[QueryInterceptor(Orders)]public ExpressionltFuncltOrder boolgtgt OnQueryOrders()
return o =gt oCustomerContactName == HttpContextCurrentUserIdentityName
[ChangeInterceptor(Products)]public void OnChangeProducts(Product product
UpdateOperations operations) if (operations == UpdateOperationsDelete)
throw new DataServiceException(400 Products cannot be deleted)
Конкурентный доступ
bull Optimistic concurrency
bull Интеграция с существующей
HTTP инфраструктурой
GET Customers(1)
200 ETagxx
PUTCustomers(1)
If-Match xx
201 ETagxx
OR
412 ETagxx
Практика
Итогиbull Работа со связанными сущностями
bull Модификация данных (GET POST PUT MERGE
DELETE)
bull Конкурентный доступ
bull Пакетная обработка
bull Сервисные операции
bull Различные источники данных
bull Безопасность ограничение видимости
bull Перехватчики
bull Различное представление данных
bull Клиентские прокси (NET PHP Java)
Все выше сказанное честно позаимствовано тут
bull MSDN Magazine
bull Extending WCF with Custom Behaviors
(httpmsdnmicrosoftcomen-usmagazinecc163302aspx)
bull WCF Bindings In Depth (httpmsdnmicrosoftcomen-
usmagazinecc163394aspx)
bull TechDaysru
bull DotNetCurrycom
bull DevCurrycom
bull Службы WCF Data Services
bull httpmsdnmicrosoftcomru-rulibrarycc668792aspx
Спасибо за внимание
Безопасность и привязки
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-сервис
bull Бинарное сжатие
bull Имперсонацияделегирование
bull Шифрование билетом Kerberos
Windows
Windows
контроллер
домена
Итоги
bull Безопасность по умолчанию включена
bull Безопасность на уровне транспорта и SOAP
сообщения
bull Интероперабельность
bull WS-Security
bull SAML токены
bull Поддержка большинства стандартных сценариев
bull Расширяемость и гибкость
Расширяемость WCF
WCFКлиент Сервис
Proxy DispatcherContract
Channel stackTransactions
Reliability
Security
Encoder
Transport
Channel stackTransactions
Reliability
Security
Encoder
TransportAddress
Binding
Расширяемость прокси-клиента
Метод 1 Метод 2
ClientOperation ClientOperation
ClientRuntime
hellipEncoderTransport
ОбъектыОбъекты
Сообщение
1
2
3
Проверка
параметров1
Формирование
сообщения
(сериализация)2
Проверка
сообщения3
Channel stack
Расширяемость диспетчера
Операция 1 Операция 2
DispatchOperation DispatchOperation
DispatchRuntime
hellipEncoderTransport
5
3
2
Channel stack
1
4
1 Проверка
сообщения
2 Выбор операции
Формирование
объекта
(десериализация)
3
4
Вызов
операции5
Проверка
параметров
ОбъектыОбъекты
Сообщение
Интерфейсы расширений
Этап Интерфейс перехватчика Описание
Проверка
параметровIParameterInspector
Используется до и после вызова
для проверки и изменения
значений параметров
Форматирование
сообщений
IDispatchMessageFormatter
IClientFormatter
Используется для сериализации и
десериализации
Проверка
сообщений
IDispatchMessageInspector
IClientMessageInspector
Используется до отправки и после
получения для проверки и замены
содержимого сообщений
Выбор операцийIDispatchOperationSelector
IClientOperationSelector
Используется для выбора
вызываемой операции для
определенного сообщения
Вызов операции IOperationInvokerИспользуется для вызова
операции
Клиент Сервис
Клиент Сервис
Клиент Сервис
Клиент Сервис
Сервис
Интерфейсы расширений
bull IInstanceProvider GetInstance(InstanceContext)
ReleaseInstance(InstanceContext Instance)
bull IErrorHandlerbull HandleError(Exception) bool
bull ProvideFault(Exception MessageVersion ref Message)
Поведение
bull Это особый тип класса расширяющий поведение серверной или
клиентской среды выполнения
bull Поведения применяются к классам ServiceHost на сервере и
ChannelFactory на клиенте
bull 4 типа пользовательских поведений
Сервис (IServiceBehavior)
Конечная точка (IEndpointBehavior)
Контракт (IContractBehavior)
Операция (IOperationBehavior)
bull IBehavior
bull Validate
bull AddBindingParameters
bull ApplyDispatchBehavior
bull ApplyClientBehavior
Уровни влияния поведений
Контекст Интерфейс Влияние
Service Endpoint Contract Operation
Service IServiceBehavior
Endpoint IEndpointBehavior
Contract IContractBehavior
Operation IOperationBehavior
Практика
WCF 40 Whatrsquos new
WCF 40
bull WCF
bull Activation Service
bull Routing Service
bull WS-Discovery
bull Standard Endpoints
bull HTTP Decompression on Client (Gzip)
bull WCF REST
bull Caching
bull Auto select format
Обнаружение WCF
Клиент СервисСервис
Discovery
Request
Discovery
Endpoint
Discovery
Response
СервисСервис
Discovery
Endpoint
Discovery
Response
Discovery
Request
Discovery
Endpoint
Discovery
Response
Сервис
Оповещение ONOFF
Announcements
Endpoint
Сервис
HelloBye
СервисСервис
HelloBye
Discovery
Endpoint
Клиент
Сделаем сервис обнажаемымbull Программная реализация
bull Либо в конфигеltservicesgt
ltservice name = MyServicegtltendpoint kind=udpDiscoveryEndpoint gt
ltservicegtltservicesgtltbehaviorsgtltserviceBehaviorsgtltbehaviorgt
ltserviceDiscoverygtltbehaviorgt
ltserviceBehaviorsgtltbehaviorsgt
ServiceHost host = new ServiceHost()hostAddServiceEndpoint(new UdpDiscoveryEndpoint()) var discovery = new ServiceDiscoveryBehavior() hostDescriptionBehaviorsAdd(discovery)hostOpen()
kindbull UdpDiscoveryEndpoint
bull UpdAnnouncementEndpoint
bull DynamicEndpoint
Давайте найдем сервис
var discoveryClient =new DiscoveryClient(new UdpDiscoveryEndpoint())
FindCriteria criteria = new FindCriteria(typeof(IMyContract)) criteriaMaxResults = 1 FindResponse discovered = discoveryClientFind(criteria) discoveryClientClose()
EndpointAddress address = discoveredEndpoints[0]Address Binding binding = new NetTcpBinding() var factory = new ChannelFactoryltIMyContractgt(binding address)
IMyContract proxy = factoryCreateChannel()proxyMyMethod() ((ICommunicationObject)proxy)Close()
Практика
Publish-Subscribe Pattern
PublisherPubSub
Service
Publish
Announcements
Endpoint
Discovery
Endpoint
Subscriber
HelloBye
Subscriber
Discover
PubSub
Discovery
EndpointDiscover
Subscribers
SOAP vs REST
prevContactIndex++
return Contacts[prevContactIndex]
SOAP ndash это выполнение операции
SOAP
Service
POST ServiceAccessMyService1svc
Host wwwsitecom
SOAPAction GetNextContact
hellip
ltsoapEnvelope xmlnssoap= hellip
hellip
ltsoapEnvelopegt
SOAP
Client
Contact Data
return GetContact(2)
REST ndash это запрос ресурса
REST
Service
GET sitecomMyService1svcContact(2)
REST
Client
Contact Data
Принципы REST
bull Пользователь взаимодействуют с ресурсами которыми может
быть всё что можно поименовать
bull Каждый ресурс имеет свой уникальный идентификатор ndash URI
bull Взаимодействие с ресурсами происходит по средствам HTTP
(команды GET POST PUT и DELETE)
bull Ресурсы описывают себя сами
bull Content-Type Content-Length hellip
bull В ресурсах могут содержатся ссылки на другие ресурсы
Ограничения REST
bull Stateless ndash отсутствие состояния у сервера Вся информация
необходимая для обработки запроса ресурса содержится в
самом запросе
bull Idempotent ndash повторное действие над объектом не
изменяет его
bull Side Effects ndash запрашивая значение объекта по GET не должно
происходить изменение этого или другого объекта
bull HTTP only
Интернет магазин
Клиенты
Клиент 1
Клиент 2
Счет 1
Счет 2
helliphellip
Клиент N
Ресурс URI
Клиенты mysitecomClients
Клиент mysitecomClientsClient
Счет mysitecomClientsClientaccount
hellip hellip
WebGet WebInvoke
bull WebGet ndash связывает метод с HTTP GET запросом
bull WebInvoke ndash все остальные HTTP запросы (POST PUT hellip)
bull UriTemplate ndash шаблон URI для связывания метода с запросом
Практика
OData
Протокол доступа к данным
основанный на REST
архитектуре
Адресация данных
bull Обращение к коллекции объектов
bull httpServicesvcCustomers
bull Обращение к объекту по PK
bull httpServicesvcCustomers(523)
bull Обращение к полю объекта
bull httpServicesvcCustomers(523)Name
bull Обращение к коллекции объектов с сортировкой
bull httpServicesvcCustomers$orderby=Name
bull Обращение к коллекции объектов с фильтрацией
bull httpServicesvcCustomers$filter=Created gt rsquo2008-01-01rsquo
bull Постарничный доступ
bull httpServicesvcCustomers$top=10amp$skip=20
Контроль доступаbull Видимость
bull Управление видимостью на уровне контейнера
объектов
bull Опции Read Query Write
bull Аутентификация
bull Интеграция с hosting-средой
bull ASPNET WCF пользовательская аутентификация
bull Перехватчики (interceptors)
bull Выполняются перед GETPUTPOSTDELETE
bull Включают валидацию и пользовательские
политики безопасности на уровне строк данных
Перехватчики
bull QueryInterceptor
bull ChangeInterceptor
[QueryInterceptor(Orders)]public ExpressionltFuncltOrder boolgtgt OnQueryOrders()
return o =gt oCustomerContactName == HttpContextCurrentUserIdentityName
[ChangeInterceptor(Products)]public void OnChangeProducts(Product product
UpdateOperations operations) if (operations == UpdateOperationsDelete)
throw new DataServiceException(400 Products cannot be deleted)
Конкурентный доступ
bull Optimistic concurrency
bull Интеграция с существующей
HTTP инфраструктурой
GET Customers(1)
200 ETagxx
PUTCustomers(1)
If-Match xx
201 ETagxx
OR
412 ETagxx
Практика
Итогиbull Работа со связанными сущностями
bull Модификация данных (GET POST PUT MERGE
DELETE)
bull Конкурентный доступ
bull Пакетная обработка
bull Сервисные операции
bull Различные источники данных
bull Безопасность ограничение видимости
bull Перехватчики
bull Различное представление данных
bull Клиентские прокси (NET PHP Java)
Все выше сказанное честно позаимствовано тут
bull MSDN Magazine
bull Extending WCF with Custom Behaviors
(httpmsdnmicrosoftcomen-usmagazinecc163302aspx)
bull WCF Bindings In Depth (httpmsdnmicrosoftcomen-
usmagazinecc163394aspx)
bull TechDaysru
bull DotNetCurrycom
bull DevCurrycom
bull Службы WCF Data Services
bull httpmsdnmicrosoftcomru-rulibrarycc668792aspx
Спасибо за внимание
Практика
Сценарий Публичный WCF-сервис
userNamePasswordValidationMode
[Windows | Custom | Membership]
Username
Windows
X509 сертификат
SSL
сертификат
Сценарий B-2-B WCF-сервис
заявки
X509 сертификат
X509
сертификат
STS
Сценарий Корпоративный WCF-сервис
bull Бинарное сжатие
bull Имперсонацияделегирование
bull Шифрование билетом Kerberos
Windows
Windows
контроллер
домена
Итоги
bull Безопасность по умолчанию включена
bull Безопасность на уровне транспорта и SOAP
сообщения
bull Интероперабельность
bull WS-Security
bull SAML токены
bull Поддержка большинства стандартных сценариев
bull Расширяемость и гибкость
Расширяемость WCF
WCFКлиент Сервис
Proxy DispatcherContract
Channel stackTransactions
Reliability
Security
Encoder
Transport
Channel stackTransactions
Reliability
Security
Encoder
TransportAddress
Binding
Расширяемость прокси-клиента
Метод 1 Метод 2
ClientOperation ClientOperation
ClientRuntime
hellipEncoderTransport
ОбъектыОбъекты
Сообщение
1
2
3
Проверка
параметров1
Формирование
сообщения
(сериализация)2
Проверка
сообщения3
Channel stack
Расширяемость диспетчера
Операция 1 Операция 2
DispatchOperation DispatchOperation
DispatchRuntime
hellipEncoderTransport
5
3
2
Channel stack
1
4
1 Проверка
сообщения
2 Выбор операции
Формирование
объекта
(десериализация)
3
4
Вызов
операции5
Проверка
параметров
ОбъектыОбъекты
Сообщение
Интерфейсы расширений
Этап Интерфейс перехватчика Описание
Проверка
параметровIParameterInspector
Используется до и после вызова
для проверки и изменения
значений параметров
Форматирование
сообщений
IDispatchMessageFormatter
IClientFormatter
Используется для сериализации и
десериализации
Проверка
сообщений
IDispatchMessageInspector
IClientMessageInspector
Используется до отправки и после
получения для проверки и замены
содержимого сообщений
Выбор операцийIDispatchOperationSelector
IClientOperationSelector
Используется для выбора
вызываемой операции для
определенного сообщения
Вызов операции IOperationInvokerИспользуется для вызова
операции
Клиент Сервис
Клиент Сервис
Клиент Сервис
Клиент Сервис
Сервис
Интерфейсы расширений
bull IInstanceProvider GetInstance(InstanceContext)
ReleaseInstance(InstanceContext Instance)
bull IErrorHandlerbull HandleError(Exception) bool
bull ProvideFault(Exception MessageVersion ref Message)
Поведение
bull Это особый тип класса расширяющий поведение серверной или
клиентской среды выполнения
bull Поведения применяются к классам ServiceHost на сервере и
ChannelFactory на клиенте
bull 4 типа пользовательских поведений
Сервис (IServiceBehavior)
Конечная точка (IEndpointBehavior)
Контракт (IContractBehavior)
Операция (IOperationBehavior)
bull IBehavior
bull Validate
bull AddBindingParameters
bull ApplyDispatchBehavior
bull ApplyClientBehavior
Уровни влияния поведений
Контекст Интерфейс Влияние
Service Endpoint Contract Operation
Service IServiceBehavior
Endpoint IEndpointBehavior
Contract IContractBehavior
Operation IOperationBehavior
Практика
WCF 40 Whatrsquos new
WCF 40
bull WCF
bull Activation Service
bull Routing Service
bull WS-Discovery
bull Standard Endpoints
bull HTTP Decompression on Client (Gzip)
bull WCF REST
bull Caching
bull Auto select format
Обнаружение WCF
Клиент СервисСервис
Discovery
Request
Discovery
Endpoint
Discovery
Response
СервисСервис
Discovery
Endpoint
Discovery
Response
Discovery
Request
Discovery
Endpoint
Discovery
Response
Сервис
Оповещение ONOFF
Announcements
Endpoint
Сервис
HelloBye
СервисСервис
HelloBye
Discovery
Endpoint
Клиент
Сделаем сервис обнажаемымbull Программная реализация
bull Либо в конфигеltservicesgt
ltservice name = MyServicegtltendpoint kind=udpDiscoveryEndpoint gt
ltservicegtltservicesgtltbehaviorsgtltserviceBehaviorsgtltbehaviorgt
ltserviceDiscoverygtltbehaviorgt
ltserviceBehaviorsgtltbehaviorsgt
ServiceHost host = new ServiceHost()hostAddServiceEndpoint(new UdpDiscoveryEndpoint()) var discovery = new ServiceDiscoveryBehavior() hostDescriptionBehaviorsAdd(discovery)hostOpen()
kindbull UdpDiscoveryEndpoint
bull UpdAnnouncementEndpoint
bull DynamicEndpoint
Давайте найдем сервис
var discoveryClient =new DiscoveryClient(new UdpDiscoveryEndpoint())
FindCriteria criteria = new FindCriteria(typeof(IMyContract)) criteriaMaxResults = 1 FindResponse discovered = discoveryClientFind(criteria) discoveryClientClose()
EndpointAddress address = discoveredEndpoints[0]Address Binding binding = new NetTcpBinding() var factory = new ChannelFactoryltIMyContractgt(binding address)
IMyContract proxy = factoryCreateChannel()proxyMyMethod() ((ICommunicationObject)proxy)Close()
Практика
Publish-Subscribe Pattern
PublisherPubSub
Service
Publish
Announcements
Endpoint
Discovery
Endpoint
Subscriber
HelloBye
Subscriber
Discover
PubSub
Discovery
EndpointDiscover
Subscribers
SOAP vs REST
prevContactIndex++
return Contacts[prevContactIndex]
SOAP ndash это выполнение операции
SOAP
Service
POST ServiceAccessMyService1svc
Host wwwsitecom
SOAPAction GetNextContact
hellip
ltsoapEnvelope xmlnssoap= hellip
hellip
ltsoapEnvelopegt
SOAP
Client
Contact Data
return GetContact(2)
REST ndash это запрос ресурса
REST
Service
GET sitecomMyService1svcContact(2)
REST
Client
Contact Data
Принципы REST
bull Пользователь взаимодействуют с ресурсами которыми может
быть всё что можно поименовать
bull Каждый ресурс имеет свой уникальный идентификатор ndash URI
bull Взаимодействие с ресурсами происходит по средствам HTTP
(команды GET POST PUT и DELETE)
bull Ресурсы описывают себя сами
bull Content-Type Content-Length hellip
bull В ресурсах могут содержатся ссылки на другие ресурсы
Ограничения REST
bull Stateless ndash отсутствие состояния у сервера Вся информация
необходимая для обработки запроса ресурса содержится в
самом запросе
bull Idempotent ndash повторное действие над объектом не
изменяет его
bull Side Effects ndash запрашивая значение объекта по GET не должно
происходить изменение этого или другого объекта
bull HTTP only
Интернет магазин
Клиенты
Клиент 1
Клиент 2
Счет 1
Счет 2
helliphellip
Клиент N
Ресурс URI
Клиенты mysitecomClients
Клиент mysitecomClientsClient
Счет mysitecomClientsClientaccount
hellip hellip
WebGet WebInvoke
bull WebGet ndash связывает метод с HTTP GET запросом
bull WebInvoke ndash все остальные HTTP запросы (POST PUT hellip)
bull UriTemplate ndash шаблон URI для связывания метода с запросом
Практика
OData
Протокол доступа к данным
основанный на REST
архитектуре
Адресация данных
bull Обращение к коллекции объектов
bull httpServicesvcCustomers
bull Обращение к объекту по PK
bull httpServicesvcCustomers(523)
bull Обращение к полю объекта
bull httpServicesvcCustomers(523)Name
bull Обращение к коллекции объектов с сортировкой
bull httpServicesvcCustomers$orderby=Name
bull Обращение к коллекции объектов с фильтрацией
bull httpServicesvcCustomers$filter=Created gt rsquo2008-01-01rsquo
bull Постарничный доступ
bull httpServicesvcCustomers$top=10amp$skip=20
Контроль доступаbull Видимость
bull Управление видимостью на уровне контейнера
объектов
bull Опции Read Query Write
bull Аутентификация
bull Интеграция с hosting-средой
bull ASPNET WCF пользовательская аутентификация
bull Перехватчики (interceptors)
bull Выполняются перед GETPUTPOSTDELETE
bull Включают валидацию и пользовательские
политики безопасности на уровне строк данных
Перехватчики
bull QueryInterceptor
bull ChangeInterceptor
[QueryInterceptor(Orders)]public ExpressionltFuncltOrder boolgtgt OnQueryOrders()
return o =gt oCustomerContactName == HttpContextCurrentUserIdentityName
[ChangeInterceptor(Products)]public void OnChangeProducts(Product product
UpdateOperations operations) if (operations == UpdateOperationsDelete)
throw new DataServiceException(400 Products cannot be deleted)
Конкурентный доступ
bull Optimistic concurrency
bull Интеграция с существующей
HTTP инфраструктурой
GET Customers(1)
200 ETagxx
PUTCustomers(1)
If-Match xx
201 ETagxx
OR
412 ETagxx
Практика
Итогиbull Работа со связанными сущностями
bull Модификация данных (GET POST PUT MERGE
DELETE)
bull Конкурентный доступ
bull Пакетная обработка
bull Сервисные операции
bull Различные источники данных
bull Безопасность ограничение видимости
bull Перехватчики
bull Различное представление данных
bull Клиентские прокси (NET PHP Java)
Все выше сказанное честно позаимствовано тут
bull MSDN Magazine
bull Extending WCF with Custom Behaviors
(httpmsdnmicrosoftcomen-usmagazinecc163302aspx)
bull WCF Bindings In Depth (httpmsdnmicrosoftcomen-
usmagazinecc163394aspx)
bull TechDaysru
bull DotNetCurrycom
bull DevCurrycom
bull Службы WCF Data Services
bull httpmsdnmicrosoftcomru-rulibrarycc668792aspx
Спасибо за внимание
Сценарий Публичный WCF-сервис
userNamePasswordValidationMode
[Windows | Custom | Membership]
Username
Windows
X509 сертификат
SSL
сертификат
Сценарий B-2-B WCF-сервис
заявки
X509 сертификат
X509
сертификат
STS
Сценарий Корпоративный WCF-сервис
bull Бинарное сжатие
bull Имперсонацияделегирование
bull Шифрование билетом Kerberos
Windows
Windows
контроллер
домена
Итоги
bull Безопасность по умолчанию включена
bull Безопасность на уровне транспорта и SOAP
сообщения
bull Интероперабельность
bull WS-Security
bull SAML токены
bull Поддержка большинства стандартных сценариев
bull Расширяемость и гибкость
Расширяемость WCF
WCFКлиент Сервис
Proxy DispatcherContract
Channel stackTransactions
Reliability
Security
Encoder
Transport
Channel stackTransactions
Reliability
Security
Encoder
TransportAddress
Binding
Расширяемость прокси-клиента
Метод 1 Метод 2
ClientOperation ClientOperation
ClientRuntime
hellipEncoderTransport
ОбъектыОбъекты
Сообщение
1
2
3
Проверка
параметров1
Формирование
сообщения
(сериализация)2
Проверка
сообщения3
Channel stack
Расширяемость диспетчера
Операция 1 Операция 2
DispatchOperation DispatchOperation
DispatchRuntime
hellipEncoderTransport
5
3
2
Channel stack
1
4
1 Проверка
сообщения
2 Выбор операции
Формирование
объекта
(десериализация)
3
4
Вызов
операции5
Проверка
параметров
ОбъектыОбъекты
Сообщение
Интерфейсы расширений
Этап Интерфейс перехватчика Описание
Проверка
параметровIParameterInspector
Используется до и после вызова
для проверки и изменения
значений параметров
Форматирование
сообщений
IDispatchMessageFormatter
IClientFormatter
Используется для сериализации и
десериализации
Проверка
сообщений
IDispatchMessageInspector
IClientMessageInspector
Используется до отправки и после
получения для проверки и замены
содержимого сообщений
Выбор операцийIDispatchOperationSelector
IClientOperationSelector
Используется для выбора
вызываемой операции для
определенного сообщения
Вызов операции IOperationInvokerИспользуется для вызова
операции
Клиент Сервис
Клиент Сервис
Клиент Сервис
Клиент Сервис
Сервис
Интерфейсы расширений
bull IInstanceProvider GetInstance(InstanceContext)
ReleaseInstance(InstanceContext Instance)
bull IErrorHandlerbull HandleError(Exception) bool
bull ProvideFault(Exception MessageVersion ref Message)
Поведение
bull Это особый тип класса расширяющий поведение серверной или
клиентской среды выполнения
bull Поведения применяются к классам ServiceHost на сервере и
ChannelFactory на клиенте
bull 4 типа пользовательских поведений
Сервис (IServiceBehavior)
Конечная точка (IEndpointBehavior)
Контракт (IContractBehavior)
Операция (IOperationBehavior)
bull IBehavior
bull Validate
bull AddBindingParameters
bull ApplyDispatchBehavior
bull ApplyClientBehavior
Уровни влияния поведений
Контекст Интерфейс Влияние
Service Endpoint Contract Operation
Service IServiceBehavior
Endpoint IEndpointBehavior
Contract IContractBehavior
Operation IOperationBehavior
Практика
WCF 40 Whatrsquos new
WCF 40
bull WCF
bull Activation Service
bull Routing Service
bull WS-Discovery
bull Standard Endpoints
bull HTTP Decompression on Client (Gzip)
bull WCF REST
bull Caching
bull Auto select format
Обнаружение WCF
Клиент СервисСервис
Discovery
Request
Discovery
Endpoint
Discovery
Response
СервисСервис
Discovery
Endpoint
Discovery
Response
Discovery
Request
Discovery
Endpoint
Discovery
Response
Сервис
Оповещение ONOFF
Announcements
Endpoint
Сервис
HelloBye
СервисСервис
HelloBye
Discovery
Endpoint
Клиент
Сделаем сервис обнажаемымbull Программная реализация
bull Либо в конфигеltservicesgt
ltservice name = MyServicegtltendpoint kind=udpDiscoveryEndpoint gt
ltservicegtltservicesgtltbehaviorsgtltserviceBehaviorsgtltbehaviorgt
ltserviceDiscoverygtltbehaviorgt
ltserviceBehaviorsgtltbehaviorsgt
ServiceHost host = new ServiceHost()hostAddServiceEndpoint(new UdpDiscoveryEndpoint()) var discovery = new ServiceDiscoveryBehavior() hostDescriptionBehaviorsAdd(discovery)hostOpen()
kindbull UdpDiscoveryEndpoint
bull UpdAnnouncementEndpoint
bull DynamicEndpoint
Давайте найдем сервис
var discoveryClient =new DiscoveryClient(new UdpDiscoveryEndpoint())
FindCriteria criteria = new FindCriteria(typeof(IMyContract)) criteriaMaxResults = 1 FindResponse discovered = discoveryClientFind(criteria) discoveryClientClose()
EndpointAddress address = discoveredEndpoints[0]Address Binding binding = new NetTcpBinding() var factory = new ChannelFactoryltIMyContractgt(binding address)
IMyContract proxy = factoryCreateChannel()proxyMyMethod() ((ICommunicationObject)proxy)Close()
Практика
Publish-Subscribe Pattern
PublisherPubSub
Service
Publish
Announcements
Endpoint
Discovery
Endpoint
Subscriber
HelloBye
Subscriber
Discover
PubSub
Discovery
EndpointDiscover
Subscribers
SOAP vs REST
prevContactIndex++
return Contacts[prevContactIndex]
SOAP ndash это выполнение операции
SOAP
Service
POST ServiceAccessMyService1svc
Host wwwsitecom
SOAPAction GetNextContact
hellip
ltsoapEnvelope xmlnssoap= hellip
hellip
ltsoapEnvelopegt
SOAP
Client
Contact Data
return GetContact(2)
REST ndash это запрос ресурса
REST
Service
GET sitecomMyService1svcContact(2)
REST
Client
Contact Data
Принципы REST
bull Пользователь взаимодействуют с ресурсами которыми может
быть всё что можно поименовать
bull Каждый ресурс имеет свой уникальный идентификатор ndash URI
bull Взаимодействие с ресурсами происходит по средствам HTTP
(команды GET POST PUT и DELETE)
bull Ресурсы описывают себя сами
bull Content-Type Content-Length hellip
bull В ресурсах могут содержатся ссылки на другие ресурсы
Ограничения REST
bull Stateless ndash отсутствие состояния у сервера Вся информация
необходимая для обработки запроса ресурса содержится в
самом запросе
bull Idempotent ndash повторное действие над объектом не
изменяет его
bull Side Effects ndash запрашивая значение объекта по GET не должно
происходить изменение этого или другого объекта
bull HTTP only
Интернет магазин
Клиенты
Клиент 1
Клиент 2
Счет 1
Счет 2
helliphellip
Клиент N
Ресурс URI
Клиенты mysitecomClients
Клиент mysitecomClientsClient
Счет mysitecomClientsClientaccount
hellip hellip
WebGet WebInvoke
bull WebGet ndash связывает метод с HTTP GET запросом
bull WebInvoke ndash все остальные HTTP запросы (POST PUT hellip)
bull UriTemplate ndash шаблон URI для связывания метода с запросом
Практика
OData
Протокол доступа к данным
основанный на REST
архитектуре
Адресация данных
bull Обращение к коллекции объектов
bull httpServicesvcCustomers
bull Обращение к объекту по PK
bull httpServicesvcCustomers(523)
bull Обращение к полю объекта
bull httpServicesvcCustomers(523)Name
bull Обращение к коллекции объектов с сортировкой
bull httpServicesvcCustomers$orderby=Name
bull Обращение к коллекции объектов с фильтрацией
bull httpServicesvcCustomers$filter=Created gt rsquo2008-01-01rsquo
bull Постарничный доступ
bull httpServicesvcCustomers$top=10amp$skip=20
Контроль доступаbull Видимость
bull Управление видимостью на уровне контейнера
объектов
bull Опции Read Query Write
bull Аутентификация
bull Интеграция с hosting-средой
bull ASPNET WCF пользовательская аутентификация
bull Перехватчики (interceptors)
bull Выполняются перед GETPUTPOSTDELETE
bull Включают валидацию и пользовательские
политики безопасности на уровне строк данных
Перехватчики
bull QueryInterceptor
bull ChangeInterceptor
[QueryInterceptor(Orders)]public ExpressionltFuncltOrder boolgtgt OnQueryOrders()
return o =gt oCustomerContactName == HttpContextCurrentUserIdentityName
[ChangeInterceptor(Products)]public void OnChangeProducts(Product product
UpdateOperations operations) if (operations == UpdateOperationsDelete)
throw new DataServiceException(400 Products cannot be deleted)
Конкурентный доступ
bull Optimistic concurrency
bull Интеграция с существующей
HTTP инфраструктурой
GET Customers(1)
200 ETagxx
PUTCustomers(1)
If-Match xx
201 ETagxx
OR
412 ETagxx
Практика
Итогиbull Работа со связанными сущностями
bull Модификация данных (GET POST PUT MERGE
DELETE)
bull Конкурентный доступ
bull Пакетная обработка
bull Сервисные операции
bull Различные источники данных
bull Безопасность ограничение видимости
bull Перехватчики
bull Различное представление данных
bull Клиентские прокси (NET PHP Java)
Все выше сказанное честно позаимствовано тут
bull MSDN Magazine
bull Extending WCF with Custom Behaviors
(httpmsdnmicrosoftcomen-usmagazinecc163302aspx)
bull WCF Bindings In Depth (httpmsdnmicrosoftcomen-
usmagazinecc163394aspx)
bull TechDaysru
bull DotNetCurrycom
bull DevCurrycom
bull Службы WCF Data Services
bull httpmsdnmicrosoftcomru-rulibrarycc668792aspx
Спасибо за внимание
Сценарий B-2-B WCF-сервис
заявки
X509 сертификат
X509
сертификат
STS
Сценарий Корпоративный WCF-сервис
bull Бинарное сжатие
bull Имперсонацияделегирование
bull Шифрование билетом Kerberos
Windows
Windows
контроллер
домена
Итоги
bull Безопасность по умолчанию включена
bull Безопасность на уровне транспорта и SOAP
сообщения
bull Интероперабельность
bull WS-Security
bull SAML токены
bull Поддержка большинства стандартных сценариев
bull Расширяемость и гибкость
Расширяемость WCF
WCFКлиент Сервис
Proxy DispatcherContract
Channel stackTransactions
Reliability
Security
Encoder
Transport
Channel stackTransactions
Reliability
Security
Encoder
TransportAddress
Binding
Расширяемость прокси-клиента
Метод 1 Метод 2
ClientOperation ClientOperation
ClientRuntime
hellipEncoderTransport
ОбъектыОбъекты
Сообщение
1
2
3
Проверка
параметров1
Формирование
сообщения
(сериализация)2
Проверка
сообщения3
Channel stack
Расширяемость диспетчера
Операция 1 Операция 2
DispatchOperation DispatchOperation
DispatchRuntime
hellipEncoderTransport
5
3
2
Channel stack
1
4
1 Проверка
сообщения
2 Выбор операции
Формирование
объекта
(десериализация)
3
4
Вызов
операции5
Проверка
параметров
ОбъектыОбъекты
Сообщение
Интерфейсы расширений
Этап Интерфейс перехватчика Описание
Проверка
параметровIParameterInspector
Используется до и после вызова
для проверки и изменения
значений параметров
Форматирование
сообщений
IDispatchMessageFormatter
IClientFormatter
Используется для сериализации и
десериализации
Проверка
сообщений
IDispatchMessageInspector
IClientMessageInspector
Используется до отправки и после
получения для проверки и замены
содержимого сообщений
Выбор операцийIDispatchOperationSelector
IClientOperationSelector
Используется для выбора
вызываемой операции для
определенного сообщения
Вызов операции IOperationInvokerИспользуется для вызова
операции
Клиент Сервис
Клиент Сервис
Клиент Сервис
Клиент Сервис
Сервис
Интерфейсы расширений
bull IInstanceProvider GetInstance(InstanceContext)
ReleaseInstance(InstanceContext Instance)
bull IErrorHandlerbull HandleError(Exception) bool
bull ProvideFault(Exception MessageVersion ref Message)
Поведение
bull Это особый тип класса расширяющий поведение серверной или
клиентской среды выполнения
bull Поведения применяются к классам ServiceHost на сервере и
ChannelFactory на клиенте
bull 4 типа пользовательских поведений
Сервис (IServiceBehavior)
Конечная точка (IEndpointBehavior)
Контракт (IContractBehavior)
Операция (IOperationBehavior)
bull IBehavior
bull Validate
bull AddBindingParameters
bull ApplyDispatchBehavior
bull ApplyClientBehavior
Уровни влияния поведений
Контекст Интерфейс Влияние
Service Endpoint Contract Operation
Service IServiceBehavior
Endpoint IEndpointBehavior
Contract IContractBehavior
Operation IOperationBehavior
Практика
WCF 40 Whatrsquos new
WCF 40
bull WCF
bull Activation Service
bull Routing Service
bull WS-Discovery
bull Standard Endpoints
bull HTTP Decompression on Client (Gzip)
bull WCF REST
bull Caching
bull Auto select format
Обнаружение WCF
Клиент СервисСервис
Discovery
Request
Discovery
Endpoint
Discovery
Response
СервисСервис
Discovery
Endpoint
Discovery
Response
Discovery
Request
Discovery
Endpoint
Discovery
Response
Сервис
Оповещение ONOFF
Announcements
Endpoint
Сервис
HelloBye
СервисСервис
HelloBye
Discovery
Endpoint
Клиент
Сделаем сервис обнажаемымbull Программная реализация
bull Либо в конфигеltservicesgt
ltservice name = MyServicegtltendpoint kind=udpDiscoveryEndpoint gt
ltservicegtltservicesgtltbehaviorsgtltserviceBehaviorsgtltbehaviorgt
ltserviceDiscoverygtltbehaviorgt
ltserviceBehaviorsgtltbehaviorsgt
ServiceHost host = new ServiceHost()hostAddServiceEndpoint(new UdpDiscoveryEndpoint()) var discovery = new ServiceDiscoveryBehavior() hostDescriptionBehaviorsAdd(discovery)hostOpen()
kindbull UdpDiscoveryEndpoint
bull UpdAnnouncementEndpoint
bull DynamicEndpoint
Давайте найдем сервис
var discoveryClient =new DiscoveryClient(new UdpDiscoveryEndpoint())
FindCriteria criteria = new FindCriteria(typeof(IMyContract)) criteriaMaxResults = 1 FindResponse discovered = discoveryClientFind(criteria) discoveryClientClose()
EndpointAddress address = discoveredEndpoints[0]Address Binding binding = new NetTcpBinding() var factory = new ChannelFactoryltIMyContractgt(binding address)
IMyContract proxy = factoryCreateChannel()proxyMyMethod() ((ICommunicationObject)proxy)Close()
Практика
Publish-Subscribe Pattern
PublisherPubSub
Service
Publish
Announcements
Endpoint
Discovery
Endpoint
Subscriber
HelloBye
Subscriber
Discover
PubSub
Discovery
EndpointDiscover
Subscribers
SOAP vs REST
prevContactIndex++
return Contacts[prevContactIndex]
SOAP ndash это выполнение операции
SOAP
Service
POST ServiceAccessMyService1svc
Host wwwsitecom
SOAPAction GetNextContact
hellip
ltsoapEnvelope xmlnssoap= hellip
hellip
ltsoapEnvelopegt
SOAP
Client
Contact Data
return GetContact(2)
REST ndash это запрос ресурса
REST
Service
GET sitecomMyService1svcContact(2)
REST
Client
Contact Data
Принципы REST
bull Пользователь взаимодействуют с ресурсами которыми может
быть всё что можно поименовать
bull Каждый ресурс имеет свой уникальный идентификатор ndash URI
bull Взаимодействие с ресурсами происходит по средствам HTTP
(команды GET POST PUT и DELETE)
bull Ресурсы описывают себя сами
bull Content-Type Content-Length hellip
bull В ресурсах могут содержатся ссылки на другие ресурсы
Ограничения REST
bull Stateless ndash отсутствие состояния у сервера Вся информация
необходимая для обработки запроса ресурса содержится в
самом запросе
bull Idempotent ndash повторное действие над объектом не
изменяет его
bull Side Effects ndash запрашивая значение объекта по GET не должно
происходить изменение этого или другого объекта
bull HTTP only
Интернет магазин
Клиенты
Клиент 1
Клиент 2
Счет 1
Счет 2
helliphellip
Клиент N
Ресурс URI
Клиенты mysitecomClients
Клиент mysitecomClientsClient
Счет mysitecomClientsClientaccount
hellip hellip
WebGet WebInvoke
bull WebGet ndash связывает метод с HTTP GET запросом
bull WebInvoke ndash все остальные HTTP запросы (POST PUT hellip)
bull UriTemplate ndash шаблон URI для связывания метода с запросом
Практика
OData
Протокол доступа к данным
основанный на REST
архитектуре
Адресация данных
bull Обращение к коллекции объектов
bull httpServicesvcCustomers
bull Обращение к объекту по PK
bull httpServicesvcCustomers(523)
bull Обращение к полю объекта
bull httpServicesvcCustomers(523)Name
bull Обращение к коллекции объектов с сортировкой
bull httpServicesvcCustomers$orderby=Name
bull Обращение к коллекции объектов с фильтрацией
bull httpServicesvcCustomers$filter=Created gt rsquo2008-01-01rsquo
bull Постарничный доступ
bull httpServicesvcCustomers$top=10amp$skip=20
Контроль доступаbull Видимость
bull Управление видимостью на уровне контейнера
объектов
bull Опции Read Query Write
bull Аутентификация
bull Интеграция с hosting-средой
bull ASPNET WCF пользовательская аутентификация
bull Перехватчики (interceptors)
bull Выполняются перед GETPUTPOSTDELETE
bull Включают валидацию и пользовательские
политики безопасности на уровне строк данных
Перехватчики
bull QueryInterceptor
bull ChangeInterceptor
[QueryInterceptor(Orders)]public ExpressionltFuncltOrder boolgtgt OnQueryOrders()
return o =gt oCustomerContactName == HttpContextCurrentUserIdentityName
[ChangeInterceptor(Products)]public void OnChangeProducts(Product product
UpdateOperations operations) if (operations == UpdateOperationsDelete)
throw new DataServiceException(400 Products cannot be deleted)
Конкурентный доступ
bull Optimistic concurrency
bull Интеграция с существующей
HTTP инфраструктурой
GET Customers(1)
200 ETagxx
PUTCustomers(1)
If-Match xx
201 ETagxx
OR
412 ETagxx
Практика
Итогиbull Работа со связанными сущностями
bull Модификация данных (GET POST PUT MERGE
DELETE)
bull Конкурентный доступ
bull Пакетная обработка
bull Сервисные операции
bull Различные источники данных
bull Безопасность ограничение видимости
bull Перехватчики
bull Различное представление данных
bull Клиентские прокси (NET PHP Java)
Все выше сказанное честно позаимствовано тут
bull MSDN Magazine
bull Extending WCF with Custom Behaviors
(httpmsdnmicrosoftcomen-usmagazinecc163302aspx)
bull WCF Bindings In Depth (httpmsdnmicrosoftcomen-
usmagazinecc163394aspx)
bull TechDaysru
bull DotNetCurrycom
bull DevCurrycom
bull Службы WCF Data Services
bull httpmsdnmicrosoftcomru-rulibrarycc668792aspx
Спасибо за внимание
Сценарий Корпоративный WCF-сервис
bull Бинарное сжатие
bull Имперсонацияделегирование
bull Шифрование билетом Kerberos
Windows
Windows
контроллер
домена
Итоги
bull Безопасность по умолчанию включена
bull Безопасность на уровне транспорта и SOAP
сообщения
bull Интероперабельность
bull WS-Security
bull SAML токены
bull Поддержка большинства стандартных сценариев
bull Расширяемость и гибкость
Расширяемость WCF
WCFКлиент Сервис
Proxy DispatcherContract
Channel stackTransactions
Reliability
Security
Encoder
Transport
Channel stackTransactions
Reliability
Security
Encoder
TransportAddress
Binding
Расширяемость прокси-клиента
Метод 1 Метод 2
ClientOperation ClientOperation
ClientRuntime
hellipEncoderTransport
ОбъектыОбъекты
Сообщение
1
2
3
Проверка
параметров1
Формирование
сообщения
(сериализация)2
Проверка
сообщения3
Channel stack
Расширяемость диспетчера
Операция 1 Операция 2
DispatchOperation DispatchOperation
DispatchRuntime
hellipEncoderTransport
5
3
2
Channel stack
1
4
1 Проверка
сообщения
2 Выбор операции
Формирование
объекта
(десериализация)
3
4
Вызов
операции5
Проверка
параметров
ОбъектыОбъекты
Сообщение
Интерфейсы расширений
Этап Интерфейс перехватчика Описание
Проверка
параметровIParameterInspector
Используется до и после вызова
для проверки и изменения
значений параметров
Форматирование
сообщений
IDispatchMessageFormatter
IClientFormatter
Используется для сериализации и
десериализации
Проверка
сообщений
IDispatchMessageInspector
IClientMessageInspector
Используется до отправки и после
получения для проверки и замены
содержимого сообщений
Выбор операцийIDispatchOperationSelector
IClientOperationSelector
Используется для выбора
вызываемой операции для
определенного сообщения
Вызов операции IOperationInvokerИспользуется для вызова
операции
Клиент Сервис
Клиент Сервис
Клиент Сервис
Клиент Сервис
Сервис
Интерфейсы расширений
bull IInstanceProvider GetInstance(InstanceContext)
ReleaseInstance(InstanceContext Instance)
bull IErrorHandlerbull HandleError(Exception) bool
bull ProvideFault(Exception MessageVersion ref Message)
Поведение
bull Это особый тип класса расширяющий поведение серверной или
клиентской среды выполнения
bull Поведения применяются к классам ServiceHost на сервере и
ChannelFactory на клиенте
bull 4 типа пользовательских поведений
Сервис (IServiceBehavior)
Конечная точка (IEndpointBehavior)
Контракт (IContractBehavior)
Операция (IOperationBehavior)
bull IBehavior
bull Validate
bull AddBindingParameters
bull ApplyDispatchBehavior
bull ApplyClientBehavior
Уровни влияния поведений
Контекст Интерфейс Влияние
Service Endpoint Contract Operation
Service IServiceBehavior
Endpoint IEndpointBehavior
Contract IContractBehavior
Operation IOperationBehavior
Практика
WCF 40 Whatrsquos new
WCF 40
bull WCF
bull Activation Service
bull Routing Service
bull WS-Discovery
bull Standard Endpoints
bull HTTP Decompression on Client (Gzip)
bull WCF REST
bull Caching
bull Auto select format
Обнаружение WCF
Клиент СервисСервис
Discovery
Request
Discovery
Endpoint
Discovery
Response
СервисСервис
Discovery
Endpoint
Discovery
Response
Discovery
Request
Discovery
Endpoint
Discovery
Response
Сервис
Оповещение ONOFF
Announcements
Endpoint
Сервис
HelloBye
СервисСервис
HelloBye
Discovery
Endpoint
Клиент
Сделаем сервис обнажаемымbull Программная реализация
bull Либо в конфигеltservicesgt
ltservice name = MyServicegtltendpoint kind=udpDiscoveryEndpoint gt
ltservicegtltservicesgtltbehaviorsgtltserviceBehaviorsgtltbehaviorgt
ltserviceDiscoverygtltbehaviorgt
ltserviceBehaviorsgtltbehaviorsgt
ServiceHost host = new ServiceHost()hostAddServiceEndpoint(new UdpDiscoveryEndpoint()) var discovery = new ServiceDiscoveryBehavior() hostDescriptionBehaviorsAdd(discovery)hostOpen()
kindbull UdpDiscoveryEndpoint
bull UpdAnnouncementEndpoint
bull DynamicEndpoint
Давайте найдем сервис
var discoveryClient =new DiscoveryClient(new UdpDiscoveryEndpoint())
FindCriteria criteria = new FindCriteria(typeof(IMyContract)) criteriaMaxResults = 1 FindResponse discovered = discoveryClientFind(criteria) discoveryClientClose()
EndpointAddress address = discoveredEndpoints[0]Address Binding binding = new NetTcpBinding() var factory = new ChannelFactoryltIMyContractgt(binding address)
IMyContract proxy = factoryCreateChannel()proxyMyMethod() ((ICommunicationObject)proxy)Close()
Практика
Publish-Subscribe Pattern
PublisherPubSub
Service
Publish
Announcements
Endpoint
Discovery
Endpoint
Subscriber
HelloBye
Subscriber
Discover
PubSub
Discovery
EndpointDiscover
Subscribers
SOAP vs REST
prevContactIndex++
return Contacts[prevContactIndex]
SOAP ndash это выполнение операции
SOAP
Service
POST ServiceAccessMyService1svc
Host wwwsitecom
SOAPAction GetNextContact
hellip
ltsoapEnvelope xmlnssoap= hellip
hellip
ltsoapEnvelopegt
SOAP
Client
Contact Data
return GetContact(2)
REST ndash это запрос ресурса
REST
Service
GET sitecomMyService1svcContact(2)
REST
Client
Contact Data
Принципы REST
bull Пользователь взаимодействуют с ресурсами которыми может
быть всё что можно поименовать
bull Каждый ресурс имеет свой уникальный идентификатор ndash URI
bull Взаимодействие с ресурсами происходит по средствам HTTP
(команды GET POST PUT и DELETE)
bull Ресурсы описывают себя сами
bull Content-Type Content-Length hellip
bull В ресурсах могут содержатся ссылки на другие ресурсы
Ограничения REST
bull Stateless ndash отсутствие состояния у сервера Вся информация
необходимая для обработки запроса ресурса содержится в
самом запросе
bull Idempotent ndash повторное действие над объектом не
изменяет его
bull Side Effects ndash запрашивая значение объекта по GET не должно
происходить изменение этого или другого объекта
bull HTTP only
Интернет магазин
Клиенты
Клиент 1
Клиент 2
Счет 1
Счет 2
helliphellip
Клиент N
Ресурс URI
Клиенты mysitecomClients
Клиент mysitecomClientsClient
Счет mysitecomClientsClientaccount
hellip hellip
WebGet WebInvoke
bull WebGet ndash связывает метод с HTTP GET запросом
bull WebInvoke ndash все остальные HTTP запросы (POST PUT hellip)
bull UriTemplate ndash шаблон URI для связывания метода с запросом
Практика
OData
Протокол доступа к данным
основанный на REST
архитектуре
Адресация данных
bull Обращение к коллекции объектов
bull httpServicesvcCustomers
bull Обращение к объекту по PK
bull httpServicesvcCustomers(523)
bull Обращение к полю объекта
bull httpServicesvcCustomers(523)Name
bull Обращение к коллекции объектов с сортировкой
bull httpServicesvcCustomers$orderby=Name
bull Обращение к коллекции объектов с фильтрацией
bull httpServicesvcCustomers$filter=Created gt rsquo2008-01-01rsquo
bull Постарничный доступ
bull httpServicesvcCustomers$top=10amp$skip=20
Контроль доступаbull Видимость
bull Управление видимостью на уровне контейнера
объектов
bull Опции Read Query Write
bull Аутентификация
bull Интеграция с hosting-средой
bull ASPNET WCF пользовательская аутентификация
bull Перехватчики (interceptors)
bull Выполняются перед GETPUTPOSTDELETE
bull Включают валидацию и пользовательские
политики безопасности на уровне строк данных
Перехватчики
bull QueryInterceptor
bull ChangeInterceptor
[QueryInterceptor(Orders)]public ExpressionltFuncltOrder boolgtgt OnQueryOrders()
return o =gt oCustomerContactName == HttpContextCurrentUserIdentityName
[ChangeInterceptor(Products)]public void OnChangeProducts(Product product
UpdateOperations operations) if (operations == UpdateOperationsDelete)
throw new DataServiceException(400 Products cannot be deleted)
Конкурентный доступ
bull Optimistic concurrency
bull Интеграция с существующей
HTTP инфраструктурой
GET Customers(1)
200 ETagxx
PUTCustomers(1)
If-Match xx
201 ETagxx
OR
412 ETagxx
Практика
Итогиbull Работа со связанными сущностями
bull Модификация данных (GET POST PUT MERGE
DELETE)
bull Конкурентный доступ
bull Пакетная обработка
bull Сервисные операции
bull Различные источники данных
bull Безопасность ограничение видимости
bull Перехватчики
bull Различное представление данных
bull Клиентские прокси (NET PHP Java)
Все выше сказанное честно позаимствовано тут
bull MSDN Magazine
bull Extending WCF with Custom Behaviors
(httpmsdnmicrosoftcomen-usmagazinecc163302aspx)
bull WCF Bindings In Depth (httpmsdnmicrosoftcomen-
usmagazinecc163394aspx)
bull TechDaysru
bull DotNetCurrycom
bull DevCurrycom
bull Службы WCF Data Services
bull httpmsdnmicrosoftcomru-rulibrarycc668792aspx
Спасибо за внимание
Итоги
bull Безопасность по умолчанию включена
bull Безопасность на уровне транспорта и SOAP
сообщения
bull Интероперабельность
bull WS-Security
bull SAML токены
bull Поддержка большинства стандартных сценариев
bull Расширяемость и гибкость
Расширяемость WCF
WCFКлиент Сервис
Proxy DispatcherContract
Channel stackTransactions
Reliability
Security
Encoder
Transport
Channel stackTransactions
Reliability
Security
Encoder
TransportAddress
Binding
Расширяемость прокси-клиента
Метод 1 Метод 2
ClientOperation ClientOperation
ClientRuntime
hellipEncoderTransport
ОбъектыОбъекты
Сообщение
1
2
3
Проверка
параметров1
Формирование
сообщения
(сериализация)2
Проверка
сообщения3
Channel stack
Расширяемость диспетчера
Операция 1 Операция 2
DispatchOperation DispatchOperation
DispatchRuntime
hellipEncoderTransport
5
3
2
Channel stack
1
4
1 Проверка
сообщения
2 Выбор операции
Формирование
объекта
(десериализация)
3
4
Вызов
операции5
Проверка
параметров
ОбъектыОбъекты
Сообщение
Интерфейсы расширений
Этап Интерфейс перехватчика Описание
Проверка
параметровIParameterInspector
Используется до и после вызова
для проверки и изменения
значений параметров
Форматирование
сообщений
IDispatchMessageFormatter
IClientFormatter
Используется для сериализации и
десериализации
Проверка
сообщений
IDispatchMessageInspector
IClientMessageInspector
Используется до отправки и после
получения для проверки и замены
содержимого сообщений
Выбор операцийIDispatchOperationSelector
IClientOperationSelector
Используется для выбора
вызываемой операции для
определенного сообщения
Вызов операции IOperationInvokerИспользуется для вызова
операции
Клиент Сервис
Клиент Сервис
Клиент Сервис
Клиент Сервис
Сервис
Интерфейсы расширений
bull IInstanceProvider GetInstance(InstanceContext)
ReleaseInstance(InstanceContext Instance)
bull IErrorHandlerbull HandleError(Exception) bool
bull ProvideFault(Exception MessageVersion ref Message)
Поведение
bull Это особый тип класса расширяющий поведение серверной или
клиентской среды выполнения
bull Поведения применяются к классам ServiceHost на сервере и
ChannelFactory на клиенте
bull 4 типа пользовательских поведений
Сервис (IServiceBehavior)
Конечная точка (IEndpointBehavior)
Контракт (IContractBehavior)
Операция (IOperationBehavior)
bull IBehavior
bull Validate
bull AddBindingParameters
bull ApplyDispatchBehavior
bull ApplyClientBehavior
Уровни влияния поведений
Контекст Интерфейс Влияние
Service Endpoint Contract Operation
Service IServiceBehavior
Endpoint IEndpointBehavior
Contract IContractBehavior
Operation IOperationBehavior
Практика
WCF 40 Whatrsquos new
WCF 40
bull WCF
bull Activation Service
bull Routing Service
bull WS-Discovery
bull Standard Endpoints
bull HTTP Decompression on Client (Gzip)
bull WCF REST
bull Caching
bull Auto select format
Обнаружение WCF
Клиент СервисСервис
Discovery
Request
Discovery
Endpoint
Discovery
Response
СервисСервис
Discovery
Endpoint
Discovery
Response
Discovery
Request
Discovery
Endpoint
Discovery
Response
Сервис
Оповещение ONOFF
Announcements
Endpoint
Сервис
HelloBye
СервисСервис
HelloBye
Discovery
Endpoint
Клиент
Сделаем сервис обнажаемымbull Программная реализация
bull Либо в конфигеltservicesgt
ltservice name = MyServicegtltendpoint kind=udpDiscoveryEndpoint gt
ltservicegtltservicesgtltbehaviorsgtltserviceBehaviorsgtltbehaviorgt
ltserviceDiscoverygtltbehaviorgt
ltserviceBehaviorsgtltbehaviorsgt
ServiceHost host = new ServiceHost()hostAddServiceEndpoint(new UdpDiscoveryEndpoint()) var discovery = new ServiceDiscoveryBehavior() hostDescriptionBehaviorsAdd(discovery)hostOpen()
kindbull UdpDiscoveryEndpoint
bull UpdAnnouncementEndpoint
bull DynamicEndpoint
Давайте найдем сервис
var discoveryClient =new DiscoveryClient(new UdpDiscoveryEndpoint())
FindCriteria criteria = new FindCriteria(typeof(IMyContract)) criteriaMaxResults = 1 FindResponse discovered = discoveryClientFind(criteria) discoveryClientClose()
EndpointAddress address = discoveredEndpoints[0]Address Binding binding = new NetTcpBinding() var factory = new ChannelFactoryltIMyContractgt(binding address)
IMyContract proxy = factoryCreateChannel()proxyMyMethod() ((ICommunicationObject)proxy)Close()
Практика
Publish-Subscribe Pattern
PublisherPubSub
Service
Publish
Announcements
Endpoint
Discovery
Endpoint
Subscriber
HelloBye
Subscriber
Discover
PubSub
Discovery
EndpointDiscover
Subscribers
SOAP vs REST
prevContactIndex++
return Contacts[prevContactIndex]
SOAP ndash это выполнение операции
SOAP
Service
POST ServiceAccessMyService1svc
Host wwwsitecom
SOAPAction GetNextContact
hellip
ltsoapEnvelope xmlnssoap= hellip
hellip
ltsoapEnvelopegt
SOAP
Client
Contact Data
return GetContact(2)
REST ndash это запрос ресурса
REST
Service
GET sitecomMyService1svcContact(2)
REST
Client
Contact Data
Принципы REST
bull Пользователь взаимодействуют с ресурсами которыми может
быть всё что можно поименовать
bull Каждый ресурс имеет свой уникальный идентификатор ndash URI
bull Взаимодействие с ресурсами происходит по средствам HTTP
(команды GET POST PUT и DELETE)
bull Ресурсы описывают себя сами
bull Content-Type Content-Length hellip
bull В ресурсах могут содержатся ссылки на другие ресурсы
Ограничения REST
bull Stateless ndash отсутствие состояния у сервера Вся информация
необходимая для обработки запроса ресурса содержится в
самом запросе
bull Idempotent ndash повторное действие над объектом не
изменяет его
bull Side Effects ndash запрашивая значение объекта по GET не должно
происходить изменение этого или другого объекта
bull HTTP only
Интернет магазин
Клиенты
Клиент 1
Клиент 2
Счет 1
Счет 2
helliphellip
Клиент N
Ресурс URI
Клиенты mysitecomClients
Клиент mysitecomClientsClient
Счет mysitecomClientsClientaccount
hellip hellip
WebGet WebInvoke
bull WebGet ndash связывает метод с HTTP GET запросом
bull WebInvoke ndash все остальные HTTP запросы (POST PUT hellip)
bull UriTemplate ndash шаблон URI для связывания метода с запросом
Практика
OData
Протокол доступа к данным
основанный на REST
архитектуре
Адресация данных
bull Обращение к коллекции объектов
bull httpServicesvcCustomers
bull Обращение к объекту по PK
bull httpServicesvcCustomers(523)
bull Обращение к полю объекта
bull httpServicesvcCustomers(523)Name
bull Обращение к коллекции объектов с сортировкой
bull httpServicesvcCustomers$orderby=Name
bull Обращение к коллекции объектов с фильтрацией
bull httpServicesvcCustomers$filter=Created gt rsquo2008-01-01rsquo
bull Постарничный доступ
bull httpServicesvcCustomers$top=10amp$skip=20
Контроль доступаbull Видимость
bull Управление видимостью на уровне контейнера
объектов
bull Опции Read Query Write
bull Аутентификация
bull Интеграция с hosting-средой
bull ASPNET WCF пользовательская аутентификация
bull Перехватчики (interceptors)
bull Выполняются перед GETPUTPOSTDELETE
bull Включают валидацию и пользовательские
политики безопасности на уровне строк данных
Перехватчики
bull QueryInterceptor
bull ChangeInterceptor
[QueryInterceptor(Orders)]public ExpressionltFuncltOrder boolgtgt OnQueryOrders()
return o =gt oCustomerContactName == HttpContextCurrentUserIdentityName
[ChangeInterceptor(Products)]public void OnChangeProducts(Product product
UpdateOperations operations) if (operations == UpdateOperationsDelete)
throw new DataServiceException(400 Products cannot be deleted)
Конкурентный доступ
bull Optimistic concurrency
bull Интеграция с существующей
HTTP инфраструктурой
GET Customers(1)
200 ETagxx
PUTCustomers(1)
If-Match xx
201 ETagxx
OR
412 ETagxx
Практика
Итогиbull Работа со связанными сущностями
bull Модификация данных (GET POST PUT MERGE
DELETE)
bull Конкурентный доступ
bull Пакетная обработка
bull Сервисные операции
bull Различные источники данных
bull Безопасность ограничение видимости
bull Перехватчики
bull Различное представление данных
bull Клиентские прокси (NET PHP Java)
Все выше сказанное честно позаимствовано тут
bull MSDN Magazine
bull Extending WCF with Custom Behaviors
(httpmsdnmicrosoftcomen-usmagazinecc163302aspx)
bull WCF Bindings In Depth (httpmsdnmicrosoftcomen-
usmagazinecc163394aspx)
bull TechDaysru
bull DotNetCurrycom
bull DevCurrycom
bull Службы WCF Data Services
bull httpmsdnmicrosoftcomru-rulibrarycc668792aspx
Спасибо за внимание
Расширяемость WCF
WCFКлиент Сервис
Proxy DispatcherContract
Channel stackTransactions
Reliability
Security
Encoder
Transport
Channel stackTransactions
Reliability
Security
Encoder
TransportAddress
Binding
Расширяемость прокси-клиента
Метод 1 Метод 2
ClientOperation ClientOperation
ClientRuntime
hellipEncoderTransport
ОбъектыОбъекты
Сообщение
1
2
3
Проверка
параметров1
Формирование
сообщения
(сериализация)2
Проверка
сообщения3
Channel stack
Расширяемость диспетчера
Операция 1 Операция 2
DispatchOperation DispatchOperation
DispatchRuntime
hellipEncoderTransport
5
3
2
Channel stack
1
4
1 Проверка
сообщения
2 Выбор операции
Формирование
объекта
(десериализация)
3
4
Вызов
операции5
Проверка
параметров
ОбъектыОбъекты
Сообщение
Интерфейсы расширений
Этап Интерфейс перехватчика Описание
Проверка
параметровIParameterInspector
Используется до и после вызова
для проверки и изменения
значений параметров
Форматирование
сообщений
IDispatchMessageFormatter
IClientFormatter
Используется для сериализации и
десериализации
Проверка
сообщений
IDispatchMessageInspector
IClientMessageInspector
Используется до отправки и после
получения для проверки и замены
содержимого сообщений
Выбор операцийIDispatchOperationSelector
IClientOperationSelector
Используется для выбора
вызываемой операции для
определенного сообщения
Вызов операции IOperationInvokerИспользуется для вызова
операции
Клиент Сервис
Клиент Сервис
Клиент Сервис
Клиент Сервис
Сервис
Интерфейсы расширений
bull IInstanceProvider GetInstance(InstanceContext)
ReleaseInstance(InstanceContext Instance)
bull IErrorHandlerbull HandleError(Exception) bool
bull ProvideFault(Exception MessageVersion ref Message)
Поведение
bull Это особый тип класса расширяющий поведение серверной или
клиентской среды выполнения
bull Поведения применяются к классам ServiceHost на сервере и
ChannelFactory на клиенте
bull 4 типа пользовательских поведений
Сервис (IServiceBehavior)
Конечная точка (IEndpointBehavior)
Контракт (IContractBehavior)
Операция (IOperationBehavior)
bull IBehavior
bull Validate
bull AddBindingParameters
bull ApplyDispatchBehavior
bull ApplyClientBehavior
Уровни влияния поведений
Контекст Интерфейс Влияние
Service Endpoint Contract Operation
Service IServiceBehavior
Endpoint IEndpointBehavior
Contract IContractBehavior
Operation IOperationBehavior
Практика
WCF 40 Whatrsquos new
WCF 40
bull WCF
bull Activation Service
bull Routing Service
bull WS-Discovery
bull Standard Endpoints
bull HTTP Decompression on Client (Gzip)
bull WCF REST
bull Caching
bull Auto select format
Обнаружение WCF
Клиент СервисСервис
Discovery
Request
Discovery
Endpoint
Discovery
Response
СервисСервис
Discovery
Endpoint
Discovery
Response
Discovery
Request
Discovery
Endpoint
Discovery
Response
Сервис
Оповещение ONOFF
Announcements
Endpoint
Сервис
HelloBye
СервисСервис
HelloBye
Discovery
Endpoint
Клиент
Сделаем сервис обнажаемымbull Программная реализация
bull Либо в конфигеltservicesgt
ltservice name = MyServicegtltendpoint kind=udpDiscoveryEndpoint gt
ltservicegtltservicesgtltbehaviorsgtltserviceBehaviorsgtltbehaviorgt
ltserviceDiscoverygtltbehaviorgt
ltserviceBehaviorsgtltbehaviorsgt
ServiceHost host = new ServiceHost()hostAddServiceEndpoint(new UdpDiscoveryEndpoint()) var discovery = new ServiceDiscoveryBehavior() hostDescriptionBehaviorsAdd(discovery)hostOpen()
kindbull UdpDiscoveryEndpoint
bull UpdAnnouncementEndpoint
bull DynamicEndpoint
Давайте найдем сервис
var discoveryClient =new DiscoveryClient(new UdpDiscoveryEndpoint())
FindCriteria criteria = new FindCriteria(typeof(IMyContract)) criteriaMaxResults = 1 FindResponse discovered = discoveryClientFind(criteria) discoveryClientClose()
EndpointAddress address = discoveredEndpoints[0]Address Binding binding = new NetTcpBinding() var factory = new ChannelFactoryltIMyContractgt(binding address)
IMyContract proxy = factoryCreateChannel()proxyMyMethod() ((ICommunicationObject)proxy)Close()
Практика
Publish-Subscribe Pattern
PublisherPubSub
Service
Publish
Announcements
Endpoint
Discovery
Endpoint
Subscriber
HelloBye
Subscriber
Discover
PubSub
Discovery
EndpointDiscover
Subscribers
SOAP vs REST
prevContactIndex++
return Contacts[prevContactIndex]
SOAP ndash это выполнение операции
SOAP
Service
POST ServiceAccessMyService1svc
Host wwwsitecom
SOAPAction GetNextContact
hellip
ltsoapEnvelope xmlnssoap= hellip
hellip
ltsoapEnvelopegt
SOAP
Client
Contact Data
return GetContact(2)
REST ndash это запрос ресурса
REST
Service
GET sitecomMyService1svcContact(2)
REST
Client
Contact Data
Принципы REST
bull Пользователь взаимодействуют с ресурсами которыми может
быть всё что можно поименовать
bull Каждый ресурс имеет свой уникальный идентификатор ndash URI
bull Взаимодействие с ресурсами происходит по средствам HTTP
(команды GET POST PUT и DELETE)
bull Ресурсы описывают себя сами
bull Content-Type Content-Length hellip
bull В ресурсах могут содержатся ссылки на другие ресурсы
Ограничения REST
bull Stateless ndash отсутствие состояния у сервера Вся информация
необходимая для обработки запроса ресурса содержится в
самом запросе
bull Idempotent ndash повторное действие над объектом не
изменяет его
bull Side Effects ndash запрашивая значение объекта по GET не должно
происходить изменение этого или другого объекта
bull HTTP only
Интернет магазин
Клиенты
Клиент 1
Клиент 2
Счет 1
Счет 2
helliphellip
Клиент N
Ресурс URI
Клиенты mysitecomClients
Клиент mysitecomClientsClient
Счет mysitecomClientsClientaccount
hellip hellip
WebGet WebInvoke
bull WebGet ndash связывает метод с HTTP GET запросом
bull WebInvoke ndash все остальные HTTP запросы (POST PUT hellip)
bull UriTemplate ndash шаблон URI для связывания метода с запросом
Практика
OData
Протокол доступа к данным
основанный на REST
архитектуре
Адресация данных
bull Обращение к коллекции объектов
bull httpServicesvcCustomers
bull Обращение к объекту по PK
bull httpServicesvcCustomers(523)
bull Обращение к полю объекта
bull httpServicesvcCustomers(523)Name
bull Обращение к коллекции объектов с сортировкой
bull httpServicesvcCustomers$orderby=Name
bull Обращение к коллекции объектов с фильтрацией
bull httpServicesvcCustomers$filter=Created gt rsquo2008-01-01rsquo
bull Постарничный доступ
bull httpServicesvcCustomers$top=10amp$skip=20
Контроль доступаbull Видимость
bull Управление видимостью на уровне контейнера
объектов
bull Опции Read Query Write
bull Аутентификация
bull Интеграция с hosting-средой
bull ASPNET WCF пользовательская аутентификация
bull Перехватчики (interceptors)
bull Выполняются перед GETPUTPOSTDELETE
bull Включают валидацию и пользовательские
политики безопасности на уровне строк данных
Перехватчики
bull QueryInterceptor
bull ChangeInterceptor
[QueryInterceptor(Orders)]public ExpressionltFuncltOrder boolgtgt OnQueryOrders()
return o =gt oCustomerContactName == HttpContextCurrentUserIdentityName
[ChangeInterceptor(Products)]public void OnChangeProducts(Product product
UpdateOperations operations) if (operations == UpdateOperationsDelete)
throw new DataServiceException(400 Products cannot be deleted)
Конкурентный доступ
bull Optimistic concurrency
bull Интеграция с существующей
HTTP инфраструктурой
GET Customers(1)
200 ETagxx
PUTCustomers(1)
If-Match xx
201 ETagxx
OR
412 ETagxx
Практика
Итогиbull Работа со связанными сущностями
bull Модификация данных (GET POST PUT MERGE
DELETE)
bull Конкурентный доступ
bull Пакетная обработка
bull Сервисные операции
bull Различные источники данных
bull Безопасность ограничение видимости
bull Перехватчики
bull Различное представление данных
bull Клиентские прокси (NET PHP Java)
Все выше сказанное честно позаимствовано тут
bull MSDN Magazine
bull Extending WCF with Custom Behaviors
(httpmsdnmicrosoftcomen-usmagazinecc163302aspx)
bull WCF Bindings In Depth (httpmsdnmicrosoftcomen-
usmagazinecc163394aspx)
bull TechDaysru
bull DotNetCurrycom
bull DevCurrycom
bull Службы WCF Data Services
bull httpmsdnmicrosoftcomru-rulibrarycc668792aspx
Спасибо за внимание
WCFКлиент Сервис
Proxy DispatcherContract
Channel stackTransactions
Reliability
Security
Encoder
Transport
Channel stackTransactions
Reliability
Security
Encoder
TransportAddress
Binding
Расширяемость прокси-клиента
Метод 1 Метод 2
ClientOperation ClientOperation
ClientRuntime
hellipEncoderTransport
ОбъектыОбъекты
Сообщение
1
2
3
Проверка
параметров1
Формирование
сообщения
(сериализация)2
Проверка
сообщения3
Channel stack
Расширяемость диспетчера
Операция 1 Операция 2
DispatchOperation DispatchOperation
DispatchRuntime
hellipEncoderTransport
5
3
2
Channel stack
1
4
1 Проверка
сообщения
2 Выбор операции
Формирование
объекта
(десериализация)
3
4
Вызов
операции5
Проверка
параметров
ОбъектыОбъекты
Сообщение
Интерфейсы расширений
Этап Интерфейс перехватчика Описание
Проверка
параметровIParameterInspector
Используется до и после вызова
для проверки и изменения
значений параметров
Форматирование
сообщений
IDispatchMessageFormatter
IClientFormatter
Используется для сериализации и
десериализации
Проверка
сообщений
IDispatchMessageInspector
IClientMessageInspector
Используется до отправки и после
получения для проверки и замены
содержимого сообщений
Выбор операцийIDispatchOperationSelector
IClientOperationSelector
Используется для выбора
вызываемой операции для
определенного сообщения
Вызов операции IOperationInvokerИспользуется для вызова
операции
Клиент Сервис
Клиент Сервис
Клиент Сервис
Клиент Сервис
Сервис
Интерфейсы расширений
bull IInstanceProvider GetInstance(InstanceContext)
ReleaseInstance(InstanceContext Instance)
bull IErrorHandlerbull HandleError(Exception) bool
bull ProvideFault(Exception MessageVersion ref Message)
Поведение
bull Это особый тип класса расширяющий поведение серверной или
клиентской среды выполнения
bull Поведения применяются к классам ServiceHost на сервере и
ChannelFactory на клиенте
bull 4 типа пользовательских поведений
Сервис (IServiceBehavior)
Конечная точка (IEndpointBehavior)
Контракт (IContractBehavior)
Операция (IOperationBehavior)
bull IBehavior
bull Validate
bull AddBindingParameters
bull ApplyDispatchBehavior
bull ApplyClientBehavior
Уровни влияния поведений
Контекст Интерфейс Влияние
Service Endpoint Contract Operation
Service IServiceBehavior
Endpoint IEndpointBehavior
Contract IContractBehavior
Operation IOperationBehavior
Практика
WCF 40 Whatrsquos new
WCF 40
bull WCF
bull Activation Service
bull Routing Service
bull WS-Discovery
bull Standard Endpoints
bull HTTP Decompression on Client (Gzip)
bull WCF REST
bull Caching
bull Auto select format
Обнаружение WCF
Клиент СервисСервис
Discovery
Request
Discovery
Endpoint
Discovery
Response
СервисСервис
Discovery
Endpoint
Discovery
Response
Discovery
Request
Discovery
Endpoint
Discovery
Response
Сервис
Оповещение ONOFF
Announcements
Endpoint
Сервис
HelloBye
СервисСервис
HelloBye
Discovery
Endpoint
Клиент
Сделаем сервис обнажаемымbull Программная реализация
bull Либо в конфигеltservicesgt
ltservice name = MyServicegtltendpoint kind=udpDiscoveryEndpoint gt
ltservicegtltservicesgtltbehaviorsgtltserviceBehaviorsgtltbehaviorgt
ltserviceDiscoverygtltbehaviorgt
ltserviceBehaviorsgtltbehaviorsgt
ServiceHost host = new ServiceHost()hostAddServiceEndpoint(new UdpDiscoveryEndpoint()) var discovery = new ServiceDiscoveryBehavior() hostDescriptionBehaviorsAdd(discovery)hostOpen()
kindbull UdpDiscoveryEndpoint
bull UpdAnnouncementEndpoint
bull DynamicEndpoint
Давайте найдем сервис
var discoveryClient =new DiscoveryClient(new UdpDiscoveryEndpoint())
FindCriteria criteria = new FindCriteria(typeof(IMyContract)) criteriaMaxResults = 1 FindResponse discovered = discoveryClientFind(criteria) discoveryClientClose()
EndpointAddress address = discoveredEndpoints[0]Address Binding binding = new NetTcpBinding() var factory = new ChannelFactoryltIMyContractgt(binding address)
IMyContract proxy = factoryCreateChannel()proxyMyMethod() ((ICommunicationObject)proxy)Close()
Практика
Publish-Subscribe Pattern
PublisherPubSub
Service
Publish
Announcements
Endpoint
Discovery
Endpoint
Subscriber
HelloBye
Subscriber
Discover
PubSub
Discovery
EndpointDiscover
Subscribers
SOAP vs REST
prevContactIndex++
return Contacts[prevContactIndex]
SOAP ndash это выполнение операции
SOAP
Service
POST ServiceAccessMyService1svc
Host wwwsitecom
SOAPAction GetNextContact
hellip
ltsoapEnvelope xmlnssoap= hellip
hellip
ltsoapEnvelopegt
SOAP
Client
Contact Data
return GetContact(2)
REST ndash это запрос ресурса
REST
Service
GET sitecomMyService1svcContact(2)
REST
Client
Contact Data
Принципы REST
bull Пользователь взаимодействуют с ресурсами которыми может
быть всё что можно поименовать
bull Каждый ресурс имеет свой уникальный идентификатор ndash URI
bull Взаимодействие с ресурсами происходит по средствам HTTP
(команды GET POST PUT и DELETE)
bull Ресурсы описывают себя сами
bull Content-Type Content-Length hellip
bull В ресурсах могут содержатся ссылки на другие ресурсы
Ограничения REST
bull Stateless ndash отсутствие состояния у сервера Вся информация
необходимая для обработки запроса ресурса содержится в
самом запросе
bull Idempotent ndash повторное действие над объектом не
изменяет его
bull Side Effects ndash запрашивая значение объекта по GET не должно
происходить изменение этого или другого объекта
bull HTTP only
Интернет магазин
Клиенты
Клиент 1
Клиент 2
Счет 1
Счет 2
helliphellip
Клиент N
Ресурс URI
Клиенты mysitecomClients
Клиент mysitecomClientsClient
Счет mysitecomClientsClientaccount
hellip hellip
WebGet WebInvoke
bull WebGet ndash связывает метод с HTTP GET запросом
bull WebInvoke ndash все остальные HTTP запросы (POST PUT hellip)
bull UriTemplate ndash шаблон URI для связывания метода с запросом
Практика
OData
Протокол доступа к данным
основанный на REST
архитектуре
Адресация данных
bull Обращение к коллекции объектов
bull httpServicesvcCustomers
bull Обращение к объекту по PK
bull httpServicesvcCustomers(523)
bull Обращение к полю объекта
bull httpServicesvcCustomers(523)Name
bull Обращение к коллекции объектов с сортировкой
bull httpServicesvcCustomers$orderby=Name
bull Обращение к коллекции объектов с фильтрацией
bull httpServicesvcCustomers$filter=Created gt rsquo2008-01-01rsquo
bull Постарничный доступ
bull httpServicesvcCustomers$top=10amp$skip=20
Контроль доступаbull Видимость
bull Управление видимостью на уровне контейнера
объектов
bull Опции Read Query Write
bull Аутентификация
bull Интеграция с hosting-средой
bull ASPNET WCF пользовательская аутентификация
bull Перехватчики (interceptors)
bull Выполняются перед GETPUTPOSTDELETE
bull Включают валидацию и пользовательские
политики безопасности на уровне строк данных
Перехватчики
bull QueryInterceptor
bull ChangeInterceptor
[QueryInterceptor(Orders)]public ExpressionltFuncltOrder boolgtgt OnQueryOrders()
return o =gt oCustomerContactName == HttpContextCurrentUserIdentityName
[ChangeInterceptor(Products)]public void OnChangeProducts(Product product
UpdateOperations operations) if (operations == UpdateOperationsDelete)
throw new DataServiceException(400 Products cannot be deleted)
Конкурентный доступ
bull Optimistic concurrency
bull Интеграция с существующей
HTTP инфраструктурой
GET Customers(1)
200 ETagxx
PUTCustomers(1)
If-Match xx
201 ETagxx
OR
412 ETagxx
Практика
Итогиbull Работа со связанными сущностями
bull Модификация данных (GET POST PUT MERGE
DELETE)
bull Конкурентный доступ
bull Пакетная обработка
bull Сервисные операции
bull Различные источники данных
bull Безопасность ограничение видимости
bull Перехватчики
bull Различное представление данных
bull Клиентские прокси (NET PHP Java)
Все выше сказанное честно позаимствовано тут
bull MSDN Magazine
bull Extending WCF with Custom Behaviors
(httpmsdnmicrosoftcomen-usmagazinecc163302aspx)
bull WCF Bindings In Depth (httpmsdnmicrosoftcomen-
usmagazinecc163394aspx)
bull TechDaysru
bull DotNetCurrycom
bull DevCurrycom
bull Службы WCF Data Services
bull httpmsdnmicrosoftcomru-rulibrarycc668792aspx
Спасибо за внимание
Расширяемость прокси-клиента
Метод 1 Метод 2
ClientOperation ClientOperation
ClientRuntime
hellipEncoderTransport
ОбъектыОбъекты
Сообщение
1
2
3
Проверка
параметров1
Формирование
сообщения
(сериализация)2
Проверка
сообщения3
Channel stack
Расширяемость диспетчера
Операция 1 Операция 2
DispatchOperation DispatchOperation
DispatchRuntime
hellipEncoderTransport
5
3
2
Channel stack
1
4
1 Проверка
сообщения
2 Выбор операции
Формирование
объекта
(десериализация)
3
4
Вызов
операции5
Проверка
параметров
ОбъектыОбъекты
Сообщение
Интерфейсы расширений
Этап Интерфейс перехватчика Описание
Проверка
параметровIParameterInspector
Используется до и после вызова
для проверки и изменения
значений параметров
Форматирование
сообщений
IDispatchMessageFormatter
IClientFormatter
Используется для сериализации и
десериализации
Проверка
сообщений
IDispatchMessageInspector
IClientMessageInspector
Используется до отправки и после
получения для проверки и замены
содержимого сообщений
Выбор операцийIDispatchOperationSelector
IClientOperationSelector
Используется для выбора
вызываемой операции для
определенного сообщения
Вызов операции IOperationInvokerИспользуется для вызова
операции
Клиент Сервис
Клиент Сервис
Клиент Сервис
Клиент Сервис
Сервис
Интерфейсы расширений
bull IInstanceProvider GetInstance(InstanceContext)
ReleaseInstance(InstanceContext Instance)
bull IErrorHandlerbull HandleError(Exception) bool
bull ProvideFault(Exception MessageVersion ref Message)
Поведение
bull Это особый тип класса расширяющий поведение серверной или
клиентской среды выполнения
bull Поведения применяются к классам ServiceHost на сервере и
ChannelFactory на клиенте
bull 4 типа пользовательских поведений
Сервис (IServiceBehavior)
Конечная точка (IEndpointBehavior)
Контракт (IContractBehavior)
Операция (IOperationBehavior)
bull IBehavior
bull Validate
bull AddBindingParameters
bull ApplyDispatchBehavior
bull ApplyClientBehavior
Уровни влияния поведений
Контекст Интерфейс Влияние
Service Endpoint Contract Operation
Service IServiceBehavior
Endpoint IEndpointBehavior
Contract IContractBehavior
Operation IOperationBehavior
Практика
WCF 40 Whatrsquos new
WCF 40
bull WCF
bull Activation Service
bull Routing Service
bull WS-Discovery
bull Standard Endpoints
bull HTTP Decompression on Client (Gzip)
bull WCF REST
bull Caching
bull Auto select format
Обнаружение WCF
Клиент СервисСервис
Discovery
Request
Discovery
Endpoint
Discovery
Response
СервисСервис
Discovery
Endpoint
Discovery
Response
Discovery
Request
Discovery
Endpoint
Discovery
Response
Сервис
Оповещение ONOFF
Announcements
Endpoint
Сервис
HelloBye
СервисСервис
HelloBye
Discovery
Endpoint
Клиент
Сделаем сервис обнажаемымbull Программная реализация
bull Либо в конфигеltservicesgt
ltservice name = MyServicegtltendpoint kind=udpDiscoveryEndpoint gt
ltservicegtltservicesgtltbehaviorsgtltserviceBehaviorsgtltbehaviorgt
ltserviceDiscoverygtltbehaviorgt
ltserviceBehaviorsgtltbehaviorsgt
ServiceHost host = new ServiceHost()hostAddServiceEndpoint(new UdpDiscoveryEndpoint()) var discovery = new ServiceDiscoveryBehavior() hostDescriptionBehaviorsAdd(discovery)hostOpen()
kindbull UdpDiscoveryEndpoint
bull UpdAnnouncementEndpoint
bull DynamicEndpoint
Давайте найдем сервис
var discoveryClient =new DiscoveryClient(new UdpDiscoveryEndpoint())
FindCriteria criteria = new FindCriteria(typeof(IMyContract)) criteriaMaxResults = 1 FindResponse discovered = discoveryClientFind(criteria) discoveryClientClose()
EndpointAddress address = discoveredEndpoints[0]Address Binding binding = new NetTcpBinding() var factory = new ChannelFactoryltIMyContractgt(binding address)
IMyContract proxy = factoryCreateChannel()proxyMyMethod() ((ICommunicationObject)proxy)Close()
Практика
Publish-Subscribe Pattern
PublisherPubSub
Service
Publish
Announcements
Endpoint
Discovery
Endpoint
Subscriber
HelloBye
Subscriber
Discover
PubSub
Discovery
EndpointDiscover
Subscribers
SOAP vs REST
prevContactIndex++
return Contacts[prevContactIndex]
SOAP ndash это выполнение операции
SOAP
Service
POST ServiceAccessMyService1svc
Host wwwsitecom
SOAPAction GetNextContact
hellip
ltsoapEnvelope xmlnssoap= hellip
hellip
ltsoapEnvelopegt
SOAP
Client
Contact Data
return GetContact(2)
REST ndash это запрос ресурса
REST
Service
GET sitecomMyService1svcContact(2)
REST
Client
Contact Data
Принципы REST
bull Пользователь взаимодействуют с ресурсами которыми может
быть всё что можно поименовать
bull Каждый ресурс имеет свой уникальный идентификатор ndash URI
bull Взаимодействие с ресурсами происходит по средствам HTTP
(команды GET POST PUT и DELETE)
bull Ресурсы описывают себя сами
bull Content-Type Content-Length hellip
bull В ресурсах могут содержатся ссылки на другие ресурсы
Ограничения REST
bull Stateless ndash отсутствие состояния у сервера Вся информация
необходимая для обработки запроса ресурса содержится в
самом запросе
bull Idempotent ndash повторное действие над объектом не
изменяет его
bull Side Effects ndash запрашивая значение объекта по GET не должно
происходить изменение этого или другого объекта
bull HTTP only
Интернет магазин
Клиенты
Клиент 1
Клиент 2
Счет 1
Счет 2
helliphellip
Клиент N
Ресурс URI
Клиенты mysitecomClients
Клиент mysitecomClientsClient
Счет mysitecomClientsClientaccount
hellip hellip
WebGet WebInvoke
bull WebGet ndash связывает метод с HTTP GET запросом
bull WebInvoke ndash все остальные HTTP запросы (POST PUT hellip)
bull UriTemplate ndash шаблон URI для связывания метода с запросом
Практика
OData
Протокол доступа к данным
основанный на REST
архитектуре
Адресация данных
bull Обращение к коллекции объектов
bull httpServicesvcCustomers
bull Обращение к объекту по PK
bull httpServicesvcCustomers(523)
bull Обращение к полю объекта
bull httpServicesvcCustomers(523)Name
bull Обращение к коллекции объектов с сортировкой
bull httpServicesvcCustomers$orderby=Name
bull Обращение к коллекции объектов с фильтрацией
bull httpServicesvcCustomers$filter=Created gt rsquo2008-01-01rsquo
bull Постарничный доступ
bull httpServicesvcCustomers$top=10amp$skip=20
Контроль доступаbull Видимость
bull Управление видимостью на уровне контейнера
объектов
bull Опции Read Query Write
bull Аутентификация
bull Интеграция с hosting-средой
bull ASPNET WCF пользовательская аутентификация
bull Перехватчики (interceptors)
bull Выполняются перед GETPUTPOSTDELETE
bull Включают валидацию и пользовательские
политики безопасности на уровне строк данных
Перехватчики
bull QueryInterceptor
bull ChangeInterceptor
[QueryInterceptor(Orders)]public ExpressionltFuncltOrder boolgtgt OnQueryOrders()
return o =gt oCustomerContactName == HttpContextCurrentUserIdentityName
[ChangeInterceptor(Products)]public void OnChangeProducts(Product product
UpdateOperations operations) if (operations == UpdateOperationsDelete)
throw new DataServiceException(400 Products cannot be deleted)
Конкурентный доступ
bull Optimistic concurrency
bull Интеграция с существующей
HTTP инфраструктурой
GET Customers(1)
200 ETagxx
PUTCustomers(1)
If-Match xx
201 ETagxx
OR
412 ETagxx
Практика
Итогиbull Работа со связанными сущностями
bull Модификация данных (GET POST PUT MERGE
DELETE)
bull Конкурентный доступ
bull Пакетная обработка
bull Сервисные операции
bull Различные источники данных
bull Безопасность ограничение видимости
bull Перехватчики
bull Различное представление данных
bull Клиентские прокси (NET PHP Java)
Все выше сказанное честно позаимствовано тут
bull MSDN Magazine
bull Extending WCF with Custom Behaviors
(httpmsdnmicrosoftcomen-usmagazinecc163302aspx)
bull WCF Bindings In Depth (httpmsdnmicrosoftcomen-
usmagazinecc163394aspx)
bull TechDaysru
bull DotNetCurrycom
bull DevCurrycom
bull Службы WCF Data Services
bull httpmsdnmicrosoftcomru-rulibrarycc668792aspx
Спасибо за внимание
Расширяемость диспетчера
Операция 1 Операция 2
DispatchOperation DispatchOperation
DispatchRuntime
hellipEncoderTransport
5
3
2
Channel stack
1
4
1 Проверка
сообщения
2 Выбор операции
Формирование
объекта
(десериализация)
3
4
Вызов
операции5
Проверка
параметров
ОбъектыОбъекты
Сообщение
Интерфейсы расширений
Этап Интерфейс перехватчика Описание
Проверка
параметровIParameterInspector
Используется до и после вызова
для проверки и изменения
значений параметров
Форматирование
сообщений
IDispatchMessageFormatter
IClientFormatter
Используется для сериализации и
десериализации
Проверка
сообщений
IDispatchMessageInspector
IClientMessageInspector
Используется до отправки и после
получения для проверки и замены
содержимого сообщений
Выбор операцийIDispatchOperationSelector
IClientOperationSelector
Используется для выбора
вызываемой операции для
определенного сообщения
Вызов операции IOperationInvokerИспользуется для вызова
операции
Клиент Сервис
Клиент Сервис
Клиент Сервис
Клиент Сервис
Сервис
Интерфейсы расширений
bull IInstanceProvider GetInstance(InstanceContext)
ReleaseInstance(InstanceContext Instance)
bull IErrorHandlerbull HandleError(Exception) bool
bull ProvideFault(Exception MessageVersion ref Message)
Поведение
bull Это особый тип класса расширяющий поведение серверной или
клиентской среды выполнения
bull Поведения применяются к классам ServiceHost на сервере и
ChannelFactory на клиенте
bull 4 типа пользовательских поведений
Сервис (IServiceBehavior)
Конечная точка (IEndpointBehavior)
Контракт (IContractBehavior)
Операция (IOperationBehavior)
bull IBehavior
bull Validate
bull AddBindingParameters
bull ApplyDispatchBehavior
bull ApplyClientBehavior
Уровни влияния поведений
Контекст Интерфейс Влияние
Service Endpoint Contract Operation
Service IServiceBehavior
Endpoint IEndpointBehavior
Contract IContractBehavior
Operation IOperationBehavior
Практика
WCF 40 Whatrsquos new
WCF 40
bull WCF
bull Activation Service
bull Routing Service
bull WS-Discovery
bull Standard Endpoints
bull HTTP Decompression on Client (Gzip)
bull WCF REST
bull Caching
bull Auto select format
Обнаружение WCF
Клиент СервисСервис
Discovery
Request
Discovery
Endpoint
Discovery
Response
СервисСервис
Discovery
Endpoint
Discovery
Response
Discovery
Request
Discovery
Endpoint
Discovery
Response
Сервис
Оповещение ONOFF
Announcements
Endpoint
Сервис
HelloBye
СервисСервис
HelloBye
Discovery
Endpoint
Клиент
Сделаем сервис обнажаемымbull Программная реализация
bull Либо в конфигеltservicesgt
ltservice name = MyServicegtltendpoint kind=udpDiscoveryEndpoint gt
ltservicegtltservicesgtltbehaviorsgtltserviceBehaviorsgtltbehaviorgt
ltserviceDiscoverygtltbehaviorgt
ltserviceBehaviorsgtltbehaviorsgt
ServiceHost host = new ServiceHost()hostAddServiceEndpoint(new UdpDiscoveryEndpoint()) var discovery = new ServiceDiscoveryBehavior() hostDescriptionBehaviorsAdd(discovery)hostOpen()
kindbull UdpDiscoveryEndpoint
bull UpdAnnouncementEndpoint
bull DynamicEndpoint
Давайте найдем сервис
var discoveryClient =new DiscoveryClient(new UdpDiscoveryEndpoint())
FindCriteria criteria = new FindCriteria(typeof(IMyContract)) criteriaMaxResults = 1 FindResponse discovered = discoveryClientFind(criteria) discoveryClientClose()
EndpointAddress address = discoveredEndpoints[0]Address Binding binding = new NetTcpBinding() var factory = new ChannelFactoryltIMyContractgt(binding address)
IMyContract proxy = factoryCreateChannel()proxyMyMethod() ((ICommunicationObject)proxy)Close()
Практика
Publish-Subscribe Pattern
PublisherPubSub
Service
Publish
Announcements
Endpoint
Discovery
Endpoint
Subscriber
HelloBye
Subscriber
Discover
PubSub
Discovery
EndpointDiscover
Subscribers
SOAP vs REST
prevContactIndex++
return Contacts[prevContactIndex]
SOAP ndash это выполнение операции
SOAP
Service
POST ServiceAccessMyService1svc
Host wwwsitecom
SOAPAction GetNextContact
hellip
ltsoapEnvelope xmlnssoap= hellip
hellip
ltsoapEnvelopegt
SOAP
Client
Contact Data
return GetContact(2)
REST ndash это запрос ресурса
REST
Service
GET sitecomMyService1svcContact(2)
REST
Client
Contact Data
Принципы REST
bull Пользователь взаимодействуют с ресурсами которыми может
быть всё что можно поименовать
bull Каждый ресурс имеет свой уникальный идентификатор ndash URI
bull Взаимодействие с ресурсами происходит по средствам HTTP
(команды GET POST PUT и DELETE)
bull Ресурсы описывают себя сами
bull Content-Type Content-Length hellip
bull В ресурсах могут содержатся ссылки на другие ресурсы
Ограничения REST
bull Stateless ndash отсутствие состояния у сервера Вся информация
необходимая для обработки запроса ресурса содержится в
самом запросе
bull Idempotent ndash повторное действие над объектом не
изменяет его
bull Side Effects ndash запрашивая значение объекта по GET не должно
происходить изменение этого или другого объекта
bull HTTP only
Интернет магазин
Клиенты
Клиент 1
Клиент 2
Счет 1
Счет 2
helliphellip
Клиент N
Ресурс URI
Клиенты mysitecomClients
Клиент mysitecomClientsClient
Счет mysitecomClientsClientaccount
hellip hellip
WebGet WebInvoke
bull WebGet ndash связывает метод с HTTP GET запросом
bull WebInvoke ndash все остальные HTTP запросы (POST PUT hellip)
bull UriTemplate ndash шаблон URI для связывания метода с запросом
Практика
OData
Протокол доступа к данным
основанный на REST
архитектуре
Адресация данных
bull Обращение к коллекции объектов
bull httpServicesvcCustomers
bull Обращение к объекту по PK
bull httpServicesvcCustomers(523)
bull Обращение к полю объекта
bull httpServicesvcCustomers(523)Name
bull Обращение к коллекции объектов с сортировкой
bull httpServicesvcCustomers$orderby=Name
bull Обращение к коллекции объектов с фильтрацией
bull httpServicesvcCustomers$filter=Created gt rsquo2008-01-01rsquo
bull Постарничный доступ
bull httpServicesvcCustomers$top=10amp$skip=20
Контроль доступаbull Видимость
bull Управление видимостью на уровне контейнера
объектов
bull Опции Read Query Write
bull Аутентификация
bull Интеграция с hosting-средой
bull ASPNET WCF пользовательская аутентификация
bull Перехватчики (interceptors)
bull Выполняются перед GETPUTPOSTDELETE
bull Включают валидацию и пользовательские
политики безопасности на уровне строк данных
Перехватчики
bull QueryInterceptor
bull ChangeInterceptor
[QueryInterceptor(Orders)]public ExpressionltFuncltOrder boolgtgt OnQueryOrders()
return o =gt oCustomerContactName == HttpContextCurrentUserIdentityName
[ChangeInterceptor(Products)]public void OnChangeProducts(Product product
UpdateOperations operations) if (operations == UpdateOperationsDelete)
throw new DataServiceException(400 Products cannot be deleted)
Конкурентный доступ
bull Optimistic concurrency
bull Интеграция с существующей
HTTP инфраструктурой
GET Customers(1)
200 ETagxx
PUTCustomers(1)
If-Match xx
201 ETagxx
OR
412 ETagxx
Практика
Итогиbull Работа со связанными сущностями
bull Модификация данных (GET POST PUT MERGE
DELETE)
bull Конкурентный доступ
bull Пакетная обработка
bull Сервисные операции
bull Различные источники данных
bull Безопасность ограничение видимости
bull Перехватчики
bull Различное представление данных
bull Клиентские прокси (NET PHP Java)
Все выше сказанное честно позаимствовано тут
bull MSDN Magazine
bull Extending WCF with Custom Behaviors
(httpmsdnmicrosoftcomen-usmagazinecc163302aspx)
bull WCF Bindings In Depth (httpmsdnmicrosoftcomen-
usmagazinecc163394aspx)
bull TechDaysru
bull DotNetCurrycom
bull DevCurrycom
bull Службы WCF Data Services
bull httpmsdnmicrosoftcomru-rulibrarycc668792aspx
Спасибо за внимание
Интерфейсы расширений
Этап Интерфейс перехватчика Описание
Проверка
параметровIParameterInspector
Используется до и после вызова
для проверки и изменения
значений параметров
Форматирование
сообщений
IDispatchMessageFormatter
IClientFormatter
Используется для сериализации и
десериализации
Проверка
сообщений
IDispatchMessageInspector
IClientMessageInspector
Используется до отправки и после
получения для проверки и замены
содержимого сообщений
Выбор операцийIDispatchOperationSelector
IClientOperationSelector
Используется для выбора
вызываемой операции для
определенного сообщения
Вызов операции IOperationInvokerИспользуется для вызова
операции
Клиент Сервис
Клиент Сервис
Клиент Сервис
Клиент Сервис
Сервис
Интерфейсы расширений
bull IInstanceProvider GetInstance(InstanceContext)
ReleaseInstance(InstanceContext Instance)
bull IErrorHandlerbull HandleError(Exception) bool
bull ProvideFault(Exception MessageVersion ref Message)
Поведение
bull Это особый тип класса расширяющий поведение серверной или
клиентской среды выполнения
bull Поведения применяются к классам ServiceHost на сервере и
ChannelFactory на клиенте
bull 4 типа пользовательских поведений
Сервис (IServiceBehavior)
Конечная точка (IEndpointBehavior)
Контракт (IContractBehavior)
Операция (IOperationBehavior)
bull IBehavior
bull Validate
bull AddBindingParameters
bull ApplyDispatchBehavior
bull ApplyClientBehavior
Уровни влияния поведений
Контекст Интерфейс Влияние
Service Endpoint Contract Operation
Service IServiceBehavior
Endpoint IEndpointBehavior
Contract IContractBehavior
Operation IOperationBehavior
Практика
WCF 40 Whatrsquos new
WCF 40
bull WCF
bull Activation Service
bull Routing Service
bull WS-Discovery
bull Standard Endpoints
bull HTTP Decompression on Client (Gzip)
bull WCF REST
bull Caching
bull Auto select format
Обнаружение WCF
Клиент СервисСервис
Discovery
Request
Discovery
Endpoint
Discovery
Response
СервисСервис
Discovery
Endpoint
Discovery
Response
Discovery
Request
Discovery
Endpoint
Discovery
Response
Сервис
Оповещение ONOFF
Announcements
Endpoint
Сервис
HelloBye
СервисСервис
HelloBye
Discovery
Endpoint
Клиент
Сделаем сервис обнажаемымbull Программная реализация
bull Либо в конфигеltservicesgt
ltservice name = MyServicegtltendpoint kind=udpDiscoveryEndpoint gt
ltservicegtltservicesgtltbehaviorsgtltserviceBehaviorsgtltbehaviorgt
ltserviceDiscoverygtltbehaviorgt
ltserviceBehaviorsgtltbehaviorsgt
ServiceHost host = new ServiceHost()hostAddServiceEndpoint(new UdpDiscoveryEndpoint()) var discovery = new ServiceDiscoveryBehavior() hostDescriptionBehaviorsAdd(discovery)hostOpen()
kindbull UdpDiscoveryEndpoint
bull UpdAnnouncementEndpoint
bull DynamicEndpoint
Давайте найдем сервис
var discoveryClient =new DiscoveryClient(new UdpDiscoveryEndpoint())
FindCriteria criteria = new FindCriteria(typeof(IMyContract)) criteriaMaxResults = 1 FindResponse discovered = discoveryClientFind(criteria) discoveryClientClose()
EndpointAddress address = discoveredEndpoints[0]Address Binding binding = new NetTcpBinding() var factory = new ChannelFactoryltIMyContractgt(binding address)
IMyContract proxy = factoryCreateChannel()proxyMyMethod() ((ICommunicationObject)proxy)Close()
Практика
Publish-Subscribe Pattern
PublisherPubSub
Service
Publish
Announcements
Endpoint
Discovery
Endpoint
Subscriber
HelloBye
Subscriber
Discover
PubSub
Discovery
EndpointDiscover
Subscribers
SOAP vs REST
prevContactIndex++
return Contacts[prevContactIndex]
SOAP ndash это выполнение операции
SOAP
Service
POST ServiceAccessMyService1svc
Host wwwsitecom
SOAPAction GetNextContact
hellip
ltsoapEnvelope xmlnssoap= hellip
hellip
ltsoapEnvelopegt
SOAP
Client
Contact Data
return GetContact(2)
REST ndash это запрос ресурса
REST
Service
GET sitecomMyService1svcContact(2)
REST
Client
Contact Data
Принципы REST
bull Пользователь взаимодействуют с ресурсами которыми может
быть всё что можно поименовать
bull Каждый ресурс имеет свой уникальный идентификатор ndash URI
bull Взаимодействие с ресурсами происходит по средствам HTTP
(команды GET POST PUT и DELETE)
bull Ресурсы описывают себя сами
bull Content-Type Content-Length hellip
bull В ресурсах могут содержатся ссылки на другие ресурсы
Ограничения REST
bull Stateless ndash отсутствие состояния у сервера Вся информация
необходимая для обработки запроса ресурса содержится в
самом запросе
bull Idempotent ndash повторное действие над объектом не
изменяет его
bull Side Effects ndash запрашивая значение объекта по GET не должно
происходить изменение этого или другого объекта
bull HTTP only
Интернет магазин
Клиенты
Клиент 1
Клиент 2
Счет 1
Счет 2
helliphellip
Клиент N
Ресурс URI
Клиенты mysitecomClients
Клиент mysitecomClientsClient
Счет mysitecomClientsClientaccount
hellip hellip
WebGet WebInvoke
bull WebGet ndash связывает метод с HTTP GET запросом
bull WebInvoke ndash все остальные HTTP запросы (POST PUT hellip)
bull UriTemplate ndash шаблон URI для связывания метода с запросом
Практика
OData
Протокол доступа к данным
основанный на REST
архитектуре
Адресация данных
bull Обращение к коллекции объектов
bull httpServicesvcCustomers
bull Обращение к объекту по PK
bull httpServicesvcCustomers(523)
bull Обращение к полю объекта
bull httpServicesvcCustomers(523)Name
bull Обращение к коллекции объектов с сортировкой
bull httpServicesvcCustomers$orderby=Name
bull Обращение к коллекции объектов с фильтрацией
bull httpServicesvcCustomers$filter=Created gt rsquo2008-01-01rsquo
bull Постарничный доступ
bull httpServicesvcCustomers$top=10amp$skip=20
Контроль доступаbull Видимость
bull Управление видимостью на уровне контейнера
объектов
bull Опции Read Query Write
bull Аутентификация
bull Интеграция с hosting-средой
bull ASPNET WCF пользовательская аутентификация
bull Перехватчики (interceptors)
bull Выполняются перед GETPUTPOSTDELETE
bull Включают валидацию и пользовательские
политики безопасности на уровне строк данных
Перехватчики
bull QueryInterceptor
bull ChangeInterceptor
[QueryInterceptor(Orders)]public ExpressionltFuncltOrder boolgtgt OnQueryOrders()
return o =gt oCustomerContactName == HttpContextCurrentUserIdentityName
[ChangeInterceptor(Products)]public void OnChangeProducts(Product product
UpdateOperations operations) if (operations == UpdateOperationsDelete)
throw new DataServiceException(400 Products cannot be deleted)
Конкурентный доступ
bull Optimistic concurrency
bull Интеграция с существующей
HTTP инфраструктурой
GET Customers(1)
200 ETagxx
PUTCustomers(1)
If-Match xx
201 ETagxx
OR
412 ETagxx
Практика
Итогиbull Работа со связанными сущностями
bull Модификация данных (GET POST PUT MERGE
DELETE)
bull Конкурентный доступ
bull Пакетная обработка
bull Сервисные операции
bull Различные источники данных
bull Безопасность ограничение видимости
bull Перехватчики
bull Различное представление данных
bull Клиентские прокси (NET PHP Java)
Все выше сказанное честно позаимствовано тут
bull MSDN Magazine
bull Extending WCF with Custom Behaviors
(httpmsdnmicrosoftcomen-usmagazinecc163302aspx)
bull WCF Bindings In Depth (httpmsdnmicrosoftcomen-
usmagazinecc163394aspx)
bull TechDaysru
bull DotNetCurrycom
bull DevCurrycom
bull Службы WCF Data Services
bull httpmsdnmicrosoftcomru-rulibrarycc668792aspx
Спасибо за внимание
Интерфейсы расширений
bull IInstanceProvider GetInstance(InstanceContext)
ReleaseInstance(InstanceContext Instance)
bull IErrorHandlerbull HandleError(Exception) bool
bull ProvideFault(Exception MessageVersion ref Message)
Поведение
bull Это особый тип класса расширяющий поведение серверной или
клиентской среды выполнения
bull Поведения применяются к классам ServiceHost на сервере и
ChannelFactory на клиенте
bull 4 типа пользовательских поведений
Сервис (IServiceBehavior)
Конечная точка (IEndpointBehavior)
Контракт (IContractBehavior)
Операция (IOperationBehavior)
bull IBehavior
bull Validate
bull AddBindingParameters
bull ApplyDispatchBehavior
bull ApplyClientBehavior
Уровни влияния поведений
Контекст Интерфейс Влияние
Service Endpoint Contract Operation
Service IServiceBehavior
Endpoint IEndpointBehavior
Contract IContractBehavior
Operation IOperationBehavior
Практика
WCF 40 Whatrsquos new
WCF 40
bull WCF
bull Activation Service
bull Routing Service
bull WS-Discovery
bull Standard Endpoints
bull HTTP Decompression on Client (Gzip)
bull WCF REST
bull Caching
bull Auto select format
Обнаружение WCF
Клиент СервисСервис
Discovery
Request
Discovery
Endpoint
Discovery
Response
СервисСервис
Discovery
Endpoint
Discovery
Response
Discovery
Request
Discovery
Endpoint
Discovery
Response
Сервис
Оповещение ONOFF
Announcements
Endpoint
Сервис
HelloBye
СервисСервис
HelloBye
Discovery
Endpoint
Клиент
Сделаем сервис обнажаемымbull Программная реализация
bull Либо в конфигеltservicesgt
ltservice name = MyServicegtltendpoint kind=udpDiscoveryEndpoint gt
ltservicegtltservicesgtltbehaviorsgtltserviceBehaviorsgtltbehaviorgt
ltserviceDiscoverygtltbehaviorgt
ltserviceBehaviorsgtltbehaviorsgt
ServiceHost host = new ServiceHost()hostAddServiceEndpoint(new UdpDiscoveryEndpoint()) var discovery = new ServiceDiscoveryBehavior() hostDescriptionBehaviorsAdd(discovery)hostOpen()
kindbull UdpDiscoveryEndpoint
bull UpdAnnouncementEndpoint
bull DynamicEndpoint
Давайте найдем сервис
var discoveryClient =new DiscoveryClient(new UdpDiscoveryEndpoint())
FindCriteria criteria = new FindCriteria(typeof(IMyContract)) criteriaMaxResults = 1 FindResponse discovered = discoveryClientFind(criteria) discoveryClientClose()
EndpointAddress address = discoveredEndpoints[0]Address Binding binding = new NetTcpBinding() var factory = new ChannelFactoryltIMyContractgt(binding address)
IMyContract proxy = factoryCreateChannel()proxyMyMethod() ((ICommunicationObject)proxy)Close()
Практика
Publish-Subscribe Pattern
PublisherPubSub
Service
Publish
Announcements
Endpoint
Discovery
Endpoint
Subscriber
HelloBye
Subscriber
Discover
PubSub
Discovery
EndpointDiscover
Subscribers
SOAP vs REST
prevContactIndex++
return Contacts[prevContactIndex]
SOAP ndash это выполнение операции
SOAP
Service
POST ServiceAccessMyService1svc
Host wwwsitecom
SOAPAction GetNextContact
hellip
ltsoapEnvelope xmlnssoap= hellip
hellip
ltsoapEnvelopegt
SOAP
Client
Contact Data
return GetContact(2)
REST ndash это запрос ресурса
REST
Service
GET sitecomMyService1svcContact(2)
REST
Client
Contact Data
Принципы REST
bull Пользователь взаимодействуют с ресурсами которыми может
быть всё что можно поименовать
bull Каждый ресурс имеет свой уникальный идентификатор ndash URI
bull Взаимодействие с ресурсами происходит по средствам HTTP
(команды GET POST PUT и DELETE)
bull Ресурсы описывают себя сами
bull Content-Type Content-Length hellip
bull В ресурсах могут содержатся ссылки на другие ресурсы
Ограничения REST
bull Stateless ndash отсутствие состояния у сервера Вся информация
необходимая для обработки запроса ресурса содержится в
самом запросе
bull Idempotent ndash повторное действие над объектом не
изменяет его
bull Side Effects ndash запрашивая значение объекта по GET не должно
происходить изменение этого или другого объекта
bull HTTP only
Интернет магазин
Клиенты
Клиент 1
Клиент 2
Счет 1
Счет 2
helliphellip
Клиент N
Ресурс URI
Клиенты mysitecomClients
Клиент mysitecomClientsClient
Счет mysitecomClientsClientaccount
hellip hellip
WebGet WebInvoke
bull WebGet ndash связывает метод с HTTP GET запросом
bull WebInvoke ndash все остальные HTTP запросы (POST PUT hellip)
bull UriTemplate ndash шаблон URI для связывания метода с запросом
Практика
OData
Протокол доступа к данным
основанный на REST
архитектуре
Адресация данных
bull Обращение к коллекции объектов
bull httpServicesvcCustomers
bull Обращение к объекту по PK
bull httpServicesvcCustomers(523)
bull Обращение к полю объекта
bull httpServicesvcCustomers(523)Name
bull Обращение к коллекции объектов с сортировкой
bull httpServicesvcCustomers$orderby=Name
bull Обращение к коллекции объектов с фильтрацией
bull httpServicesvcCustomers$filter=Created gt rsquo2008-01-01rsquo
bull Постарничный доступ
bull httpServicesvcCustomers$top=10amp$skip=20
Контроль доступаbull Видимость
bull Управление видимостью на уровне контейнера
объектов
bull Опции Read Query Write
bull Аутентификация
bull Интеграция с hosting-средой
bull ASPNET WCF пользовательская аутентификация
bull Перехватчики (interceptors)
bull Выполняются перед GETPUTPOSTDELETE
bull Включают валидацию и пользовательские
политики безопасности на уровне строк данных
Перехватчики
bull QueryInterceptor
bull ChangeInterceptor
[QueryInterceptor(Orders)]public ExpressionltFuncltOrder boolgtgt OnQueryOrders()
return o =gt oCustomerContactName == HttpContextCurrentUserIdentityName
[ChangeInterceptor(Products)]public void OnChangeProducts(Product product
UpdateOperations operations) if (operations == UpdateOperationsDelete)
throw new DataServiceException(400 Products cannot be deleted)
Конкурентный доступ
bull Optimistic concurrency
bull Интеграция с существующей
HTTP инфраструктурой
GET Customers(1)
200 ETagxx
PUTCustomers(1)
If-Match xx
201 ETagxx
OR
412 ETagxx
Практика
Итогиbull Работа со связанными сущностями
bull Модификация данных (GET POST PUT MERGE
DELETE)
bull Конкурентный доступ
bull Пакетная обработка
bull Сервисные операции
bull Различные источники данных
bull Безопасность ограничение видимости
bull Перехватчики
bull Различное представление данных
bull Клиентские прокси (NET PHP Java)
Все выше сказанное честно позаимствовано тут
bull MSDN Magazine
bull Extending WCF with Custom Behaviors
(httpmsdnmicrosoftcomen-usmagazinecc163302aspx)
bull WCF Bindings In Depth (httpmsdnmicrosoftcomen-
usmagazinecc163394aspx)
bull TechDaysru
bull DotNetCurrycom
bull DevCurrycom
bull Службы WCF Data Services
bull httpmsdnmicrosoftcomru-rulibrarycc668792aspx
Спасибо за внимание
Поведение
bull Это особый тип класса расширяющий поведение серверной или
клиентской среды выполнения
bull Поведения применяются к классам ServiceHost на сервере и
ChannelFactory на клиенте
bull 4 типа пользовательских поведений
Сервис (IServiceBehavior)
Конечная точка (IEndpointBehavior)
Контракт (IContractBehavior)
Операция (IOperationBehavior)
bull IBehavior
bull Validate
bull AddBindingParameters
bull ApplyDispatchBehavior
bull ApplyClientBehavior
Уровни влияния поведений
Контекст Интерфейс Влияние
Service Endpoint Contract Operation
Service IServiceBehavior
Endpoint IEndpointBehavior
Contract IContractBehavior
Operation IOperationBehavior
Практика
WCF 40 Whatrsquos new
WCF 40
bull WCF
bull Activation Service
bull Routing Service
bull WS-Discovery
bull Standard Endpoints
bull HTTP Decompression on Client (Gzip)
bull WCF REST
bull Caching
bull Auto select format
Обнаружение WCF
Клиент СервисСервис
Discovery
Request
Discovery
Endpoint
Discovery
Response
СервисСервис
Discovery
Endpoint
Discovery
Response
Discovery
Request
Discovery
Endpoint
Discovery
Response
Сервис
Оповещение ONOFF
Announcements
Endpoint
Сервис
HelloBye
СервисСервис
HelloBye
Discovery
Endpoint
Клиент
Сделаем сервис обнажаемымbull Программная реализация
bull Либо в конфигеltservicesgt
ltservice name = MyServicegtltendpoint kind=udpDiscoveryEndpoint gt
ltservicegtltservicesgtltbehaviorsgtltserviceBehaviorsgtltbehaviorgt
ltserviceDiscoverygtltbehaviorgt
ltserviceBehaviorsgtltbehaviorsgt
ServiceHost host = new ServiceHost()hostAddServiceEndpoint(new UdpDiscoveryEndpoint()) var discovery = new ServiceDiscoveryBehavior() hostDescriptionBehaviorsAdd(discovery)hostOpen()
kindbull UdpDiscoveryEndpoint
bull UpdAnnouncementEndpoint
bull DynamicEndpoint
Давайте найдем сервис
var discoveryClient =new DiscoveryClient(new UdpDiscoveryEndpoint())
FindCriteria criteria = new FindCriteria(typeof(IMyContract)) criteriaMaxResults = 1 FindResponse discovered = discoveryClientFind(criteria) discoveryClientClose()
EndpointAddress address = discoveredEndpoints[0]Address Binding binding = new NetTcpBinding() var factory = new ChannelFactoryltIMyContractgt(binding address)
IMyContract proxy = factoryCreateChannel()proxyMyMethod() ((ICommunicationObject)proxy)Close()
Практика
Publish-Subscribe Pattern
PublisherPubSub
Service
Publish
Announcements
Endpoint
Discovery
Endpoint
Subscriber
HelloBye
Subscriber
Discover
PubSub
Discovery
EndpointDiscover
Subscribers
SOAP vs REST
prevContactIndex++
return Contacts[prevContactIndex]
SOAP ndash это выполнение операции
SOAP
Service
POST ServiceAccessMyService1svc
Host wwwsitecom
SOAPAction GetNextContact
hellip
ltsoapEnvelope xmlnssoap= hellip
hellip
ltsoapEnvelopegt
SOAP
Client
Contact Data
return GetContact(2)
REST ndash это запрос ресурса
REST
Service
GET sitecomMyService1svcContact(2)
REST
Client
Contact Data
Принципы REST
bull Пользователь взаимодействуют с ресурсами которыми может
быть всё что можно поименовать
bull Каждый ресурс имеет свой уникальный идентификатор ndash URI
bull Взаимодействие с ресурсами происходит по средствам HTTP
(команды GET POST PUT и DELETE)
bull Ресурсы описывают себя сами
bull Content-Type Content-Length hellip
bull В ресурсах могут содержатся ссылки на другие ресурсы
Ограничения REST
bull Stateless ndash отсутствие состояния у сервера Вся информация
необходимая для обработки запроса ресурса содержится в
самом запросе
bull Idempotent ndash повторное действие над объектом не
изменяет его
bull Side Effects ndash запрашивая значение объекта по GET не должно
происходить изменение этого или другого объекта
bull HTTP only
Интернет магазин
Клиенты
Клиент 1
Клиент 2
Счет 1
Счет 2
helliphellip
Клиент N
Ресурс URI
Клиенты mysitecomClients
Клиент mysitecomClientsClient
Счет mysitecomClientsClientaccount
hellip hellip
WebGet WebInvoke
bull WebGet ndash связывает метод с HTTP GET запросом
bull WebInvoke ndash все остальные HTTP запросы (POST PUT hellip)
bull UriTemplate ndash шаблон URI для связывания метода с запросом
Практика
OData
Протокол доступа к данным
основанный на REST
архитектуре
Адресация данных
bull Обращение к коллекции объектов
bull httpServicesvcCustomers
bull Обращение к объекту по PK
bull httpServicesvcCustomers(523)
bull Обращение к полю объекта
bull httpServicesvcCustomers(523)Name
bull Обращение к коллекции объектов с сортировкой
bull httpServicesvcCustomers$orderby=Name
bull Обращение к коллекции объектов с фильтрацией
bull httpServicesvcCustomers$filter=Created gt rsquo2008-01-01rsquo
bull Постарничный доступ
bull httpServicesvcCustomers$top=10amp$skip=20
Контроль доступаbull Видимость
bull Управление видимостью на уровне контейнера
объектов
bull Опции Read Query Write
bull Аутентификация
bull Интеграция с hosting-средой
bull ASPNET WCF пользовательская аутентификация
bull Перехватчики (interceptors)
bull Выполняются перед GETPUTPOSTDELETE
bull Включают валидацию и пользовательские
политики безопасности на уровне строк данных
Перехватчики
bull QueryInterceptor
bull ChangeInterceptor
[QueryInterceptor(Orders)]public ExpressionltFuncltOrder boolgtgt OnQueryOrders()
return o =gt oCustomerContactName == HttpContextCurrentUserIdentityName
[ChangeInterceptor(Products)]public void OnChangeProducts(Product product
UpdateOperations operations) if (operations == UpdateOperationsDelete)
throw new DataServiceException(400 Products cannot be deleted)
Конкурентный доступ
bull Optimistic concurrency
bull Интеграция с существующей
HTTP инфраструктурой
GET Customers(1)
200 ETagxx
PUTCustomers(1)
If-Match xx
201 ETagxx
OR
412 ETagxx
Практика
Итогиbull Работа со связанными сущностями
bull Модификация данных (GET POST PUT MERGE
DELETE)
bull Конкурентный доступ
bull Пакетная обработка
bull Сервисные операции
bull Различные источники данных
bull Безопасность ограничение видимости
bull Перехватчики
bull Различное представление данных
bull Клиентские прокси (NET PHP Java)
Все выше сказанное честно позаимствовано тут
bull MSDN Magazine
bull Extending WCF with Custom Behaviors
(httpmsdnmicrosoftcomen-usmagazinecc163302aspx)
bull WCF Bindings In Depth (httpmsdnmicrosoftcomen-
usmagazinecc163394aspx)
bull TechDaysru
bull DotNetCurrycom
bull DevCurrycom
bull Службы WCF Data Services
bull httpmsdnmicrosoftcomru-rulibrarycc668792aspx
Спасибо за внимание
Уровни влияния поведений
Контекст Интерфейс Влияние
Service Endpoint Contract Operation
Service IServiceBehavior
Endpoint IEndpointBehavior
Contract IContractBehavior
Operation IOperationBehavior
Практика
WCF 40 Whatrsquos new
WCF 40
bull WCF
bull Activation Service
bull Routing Service
bull WS-Discovery
bull Standard Endpoints
bull HTTP Decompression on Client (Gzip)
bull WCF REST
bull Caching
bull Auto select format
Обнаружение WCF
Клиент СервисСервис
Discovery
Request
Discovery
Endpoint
Discovery
Response
СервисСервис
Discovery
Endpoint
Discovery
Response
Discovery
Request
Discovery
Endpoint
Discovery
Response
Сервис
Оповещение ONOFF
Announcements
Endpoint
Сервис
HelloBye
СервисСервис
HelloBye
Discovery
Endpoint
Клиент
Сделаем сервис обнажаемымbull Программная реализация
bull Либо в конфигеltservicesgt
ltservice name = MyServicegtltendpoint kind=udpDiscoveryEndpoint gt
ltservicegtltservicesgtltbehaviorsgtltserviceBehaviorsgtltbehaviorgt
ltserviceDiscoverygtltbehaviorgt
ltserviceBehaviorsgtltbehaviorsgt
ServiceHost host = new ServiceHost()hostAddServiceEndpoint(new UdpDiscoveryEndpoint()) var discovery = new ServiceDiscoveryBehavior() hostDescriptionBehaviorsAdd(discovery)hostOpen()
kindbull UdpDiscoveryEndpoint
bull UpdAnnouncementEndpoint
bull DynamicEndpoint
Давайте найдем сервис
var discoveryClient =new DiscoveryClient(new UdpDiscoveryEndpoint())
FindCriteria criteria = new FindCriteria(typeof(IMyContract)) criteriaMaxResults = 1 FindResponse discovered = discoveryClientFind(criteria) discoveryClientClose()
EndpointAddress address = discoveredEndpoints[0]Address Binding binding = new NetTcpBinding() var factory = new ChannelFactoryltIMyContractgt(binding address)
IMyContract proxy = factoryCreateChannel()proxyMyMethod() ((ICommunicationObject)proxy)Close()
Практика
Publish-Subscribe Pattern
PublisherPubSub
Service
Publish
Announcements
Endpoint
Discovery
Endpoint
Subscriber
HelloBye
Subscriber
Discover
PubSub
Discovery
EndpointDiscover
Subscribers
SOAP vs REST
prevContactIndex++
return Contacts[prevContactIndex]
SOAP ndash это выполнение операции
SOAP
Service
POST ServiceAccessMyService1svc
Host wwwsitecom
SOAPAction GetNextContact
hellip
ltsoapEnvelope xmlnssoap= hellip
hellip
ltsoapEnvelopegt
SOAP
Client
Contact Data
return GetContact(2)
REST ndash это запрос ресурса
REST
Service
GET sitecomMyService1svcContact(2)
REST
Client
Contact Data
Принципы REST
bull Пользователь взаимодействуют с ресурсами которыми может
быть всё что можно поименовать
bull Каждый ресурс имеет свой уникальный идентификатор ndash URI
bull Взаимодействие с ресурсами происходит по средствам HTTP
(команды GET POST PUT и DELETE)
bull Ресурсы описывают себя сами
bull Content-Type Content-Length hellip
bull В ресурсах могут содержатся ссылки на другие ресурсы
Ограничения REST
bull Stateless ndash отсутствие состояния у сервера Вся информация
необходимая для обработки запроса ресурса содержится в
самом запросе
bull Idempotent ndash повторное действие над объектом не
изменяет его
bull Side Effects ndash запрашивая значение объекта по GET не должно
происходить изменение этого или другого объекта
bull HTTP only
Интернет магазин
Клиенты
Клиент 1
Клиент 2
Счет 1
Счет 2
helliphellip
Клиент N
Ресурс URI
Клиенты mysitecomClients
Клиент mysitecomClientsClient
Счет mysitecomClientsClientaccount
hellip hellip
WebGet WebInvoke
bull WebGet ndash связывает метод с HTTP GET запросом
bull WebInvoke ndash все остальные HTTP запросы (POST PUT hellip)
bull UriTemplate ndash шаблон URI для связывания метода с запросом
Практика
OData
Протокол доступа к данным
основанный на REST
архитектуре
Адресация данных
bull Обращение к коллекции объектов
bull httpServicesvcCustomers
bull Обращение к объекту по PK
bull httpServicesvcCustomers(523)
bull Обращение к полю объекта
bull httpServicesvcCustomers(523)Name
bull Обращение к коллекции объектов с сортировкой
bull httpServicesvcCustomers$orderby=Name
bull Обращение к коллекции объектов с фильтрацией
bull httpServicesvcCustomers$filter=Created gt rsquo2008-01-01rsquo
bull Постарничный доступ
bull httpServicesvcCustomers$top=10amp$skip=20
Контроль доступаbull Видимость
bull Управление видимостью на уровне контейнера
объектов
bull Опции Read Query Write
bull Аутентификация
bull Интеграция с hosting-средой
bull ASPNET WCF пользовательская аутентификация
bull Перехватчики (interceptors)
bull Выполняются перед GETPUTPOSTDELETE
bull Включают валидацию и пользовательские
политики безопасности на уровне строк данных
Перехватчики
bull QueryInterceptor
bull ChangeInterceptor
[QueryInterceptor(Orders)]public ExpressionltFuncltOrder boolgtgt OnQueryOrders()
return o =gt oCustomerContactName == HttpContextCurrentUserIdentityName
[ChangeInterceptor(Products)]public void OnChangeProducts(Product product
UpdateOperations operations) if (operations == UpdateOperationsDelete)
throw new DataServiceException(400 Products cannot be deleted)
Конкурентный доступ
bull Optimistic concurrency
bull Интеграция с существующей
HTTP инфраструктурой
GET Customers(1)
200 ETagxx
PUTCustomers(1)
If-Match xx
201 ETagxx
OR
412 ETagxx
Практика
Итогиbull Работа со связанными сущностями
bull Модификация данных (GET POST PUT MERGE
DELETE)
bull Конкурентный доступ
bull Пакетная обработка
bull Сервисные операции
bull Различные источники данных
bull Безопасность ограничение видимости
bull Перехватчики
bull Различное представление данных
bull Клиентские прокси (NET PHP Java)
Все выше сказанное честно позаимствовано тут
bull MSDN Magazine
bull Extending WCF with Custom Behaviors
(httpmsdnmicrosoftcomen-usmagazinecc163302aspx)
bull WCF Bindings In Depth (httpmsdnmicrosoftcomen-
usmagazinecc163394aspx)
bull TechDaysru
bull DotNetCurrycom
bull DevCurrycom
bull Службы WCF Data Services
bull httpmsdnmicrosoftcomru-rulibrarycc668792aspx
Спасибо за внимание
Практика
WCF 40 Whatrsquos new
WCF 40
bull WCF
bull Activation Service
bull Routing Service
bull WS-Discovery
bull Standard Endpoints
bull HTTP Decompression on Client (Gzip)
bull WCF REST
bull Caching
bull Auto select format
Обнаружение WCF
Клиент СервисСервис
Discovery
Request
Discovery
Endpoint
Discovery
Response
СервисСервис
Discovery
Endpoint
Discovery
Response
Discovery
Request
Discovery
Endpoint
Discovery
Response
Сервис
Оповещение ONOFF
Announcements
Endpoint
Сервис
HelloBye
СервисСервис
HelloBye
Discovery
Endpoint
Клиент
Сделаем сервис обнажаемымbull Программная реализация
bull Либо в конфигеltservicesgt
ltservice name = MyServicegtltendpoint kind=udpDiscoveryEndpoint gt
ltservicegtltservicesgtltbehaviorsgtltserviceBehaviorsgtltbehaviorgt
ltserviceDiscoverygtltbehaviorgt
ltserviceBehaviorsgtltbehaviorsgt
ServiceHost host = new ServiceHost()hostAddServiceEndpoint(new UdpDiscoveryEndpoint()) var discovery = new ServiceDiscoveryBehavior() hostDescriptionBehaviorsAdd(discovery)hostOpen()
kindbull UdpDiscoveryEndpoint
bull UpdAnnouncementEndpoint
bull DynamicEndpoint
Давайте найдем сервис
var discoveryClient =new DiscoveryClient(new UdpDiscoveryEndpoint())
FindCriteria criteria = new FindCriteria(typeof(IMyContract)) criteriaMaxResults = 1 FindResponse discovered = discoveryClientFind(criteria) discoveryClientClose()
EndpointAddress address = discoveredEndpoints[0]Address Binding binding = new NetTcpBinding() var factory = new ChannelFactoryltIMyContractgt(binding address)
IMyContract proxy = factoryCreateChannel()proxyMyMethod() ((ICommunicationObject)proxy)Close()
Практика
Publish-Subscribe Pattern
PublisherPubSub
Service
Publish
Announcements
Endpoint
Discovery
Endpoint
Subscriber
HelloBye
Subscriber
Discover
PubSub
Discovery
EndpointDiscover
Subscribers
SOAP vs REST
prevContactIndex++
return Contacts[prevContactIndex]
SOAP ndash это выполнение операции
SOAP
Service
POST ServiceAccessMyService1svc
Host wwwsitecom
SOAPAction GetNextContact
hellip
ltsoapEnvelope xmlnssoap= hellip
hellip
ltsoapEnvelopegt
SOAP
Client
Contact Data
return GetContact(2)
REST ndash это запрос ресурса
REST
Service
GET sitecomMyService1svcContact(2)
REST
Client
Contact Data
Принципы REST
bull Пользователь взаимодействуют с ресурсами которыми может
быть всё что можно поименовать
bull Каждый ресурс имеет свой уникальный идентификатор ndash URI
bull Взаимодействие с ресурсами происходит по средствам HTTP
(команды GET POST PUT и DELETE)
bull Ресурсы описывают себя сами
bull Content-Type Content-Length hellip
bull В ресурсах могут содержатся ссылки на другие ресурсы
Ограничения REST
bull Stateless ndash отсутствие состояния у сервера Вся информация
необходимая для обработки запроса ресурса содержится в
самом запросе
bull Idempotent ndash повторное действие над объектом не
изменяет его
bull Side Effects ndash запрашивая значение объекта по GET не должно
происходить изменение этого или другого объекта
bull HTTP only
Интернет магазин
Клиенты
Клиент 1
Клиент 2
Счет 1
Счет 2
helliphellip
Клиент N
Ресурс URI
Клиенты mysitecomClients
Клиент mysitecomClientsClient
Счет mysitecomClientsClientaccount
hellip hellip
WebGet WebInvoke
bull WebGet ndash связывает метод с HTTP GET запросом
bull WebInvoke ndash все остальные HTTP запросы (POST PUT hellip)
bull UriTemplate ndash шаблон URI для связывания метода с запросом
Практика
OData
Протокол доступа к данным
основанный на REST
архитектуре
Адресация данных
bull Обращение к коллекции объектов
bull httpServicesvcCustomers
bull Обращение к объекту по PK
bull httpServicesvcCustomers(523)
bull Обращение к полю объекта
bull httpServicesvcCustomers(523)Name
bull Обращение к коллекции объектов с сортировкой
bull httpServicesvcCustomers$orderby=Name
bull Обращение к коллекции объектов с фильтрацией
bull httpServicesvcCustomers$filter=Created gt rsquo2008-01-01rsquo
bull Постарничный доступ
bull httpServicesvcCustomers$top=10amp$skip=20
Контроль доступаbull Видимость
bull Управление видимостью на уровне контейнера
объектов
bull Опции Read Query Write
bull Аутентификация
bull Интеграция с hosting-средой
bull ASPNET WCF пользовательская аутентификация
bull Перехватчики (interceptors)
bull Выполняются перед GETPUTPOSTDELETE
bull Включают валидацию и пользовательские
политики безопасности на уровне строк данных
Перехватчики
bull QueryInterceptor
bull ChangeInterceptor
[QueryInterceptor(Orders)]public ExpressionltFuncltOrder boolgtgt OnQueryOrders()
return o =gt oCustomerContactName == HttpContextCurrentUserIdentityName
[ChangeInterceptor(Products)]public void OnChangeProducts(Product product
UpdateOperations operations) if (operations == UpdateOperationsDelete)
throw new DataServiceException(400 Products cannot be deleted)
Конкурентный доступ
bull Optimistic concurrency
bull Интеграция с существующей
HTTP инфраструктурой
GET Customers(1)
200 ETagxx
PUTCustomers(1)
If-Match xx
201 ETagxx
OR
412 ETagxx
Практика
Итогиbull Работа со связанными сущностями
bull Модификация данных (GET POST PUT MERGE
DELETE)
bull Конкурентный доступ
bull Пакетная обработка
bull Сервисные операции
bull Различные источники данных
bull Безопасность ограничение видимости
bull Перехватчики
bull Различное представление данных
bull Клиентские прокси (NET PHP Java)
Все выше сказанное честно позаимствовано тут
bull MSDN Magazine
bull Extending WCF with Custom Behaviors
(httpmsdnmicrosoftcomen-usmagazinecc163302aspx)
bull WCF Bindings In Depth (httpmsdnmicrosoftcomen-
usmagazinecc163394aspx)
bull TechDaysru
bull DotNetCurrycom
bull DevCurrycom
bull Службы WCF Data Services
bull httpmsdnmicrosoftcomru-rulibrarycc668792aspx
Спасибо за внимание
WCF 40 Whatrsquos new
WCF 40
bull WCF
bull Activation Service
bull Routing Service
bull WS-Discovery
bull Standard Endpoints
bull HTTP Decompression on Client (Gzip)
bull WCF REST
bull Caching
bull Auto select format
Обнаружение WCF
Клиент СервисСервис
Discovery
Request
Discovery
Endpoint
Discovery
Response
СервисСервис
Discovery
Endpoint
Discovery
Response
Discovery
Request
Discovery
Endpoint
Discovery
Response
Сервис
Оповещение ONOFF
Announcements
Endpoint
Сервис
HelloBye
СервисСервис
HelloBye
Discovery
Endpoint
Клиент
Сделаем сервис обнажаемымbull Программная реализация
bull Либо в конфигеltservicesgt
ltservice name = MyServicegtltendpoint kind=udpDiscoveryEndpoint gt
ltservicegtltservicesgtltbehaviorsgtltserviceBehaviorsgtltbehaviorgt
ltserviceDiscoverygtltbehaviorgt
ltserviceBehaviorsgtltbehaviorsgt
ServiceHost host = new ServiceHost()hostAddServiceEndpoint(new UdpDiscoveryEndpoint()) var discovery = new ServiceDiscoveryBehavior() hostDescriptionBehaviorsAdd(discovery)hostOpen()
kindbull UdpDiscoveryEndpoint
bull UpdAnnouncementEndpoint
bull DynamicEndpoint
Давайте найдем сервис
var discoveryClient =new DiscoveryClient(new UdpDiscoveryEndpoint())
FindCriteria criteria = new FindCriteria(typeof(IMyContract)) criteriaMaxResults = 1 FindResponse discovered = discoveryClientFind(criteria) discoveryClientClose()
EndpointAddress address = discoveredEndpoints[0]Address Binding binding = new NetTcpBinding() var factory = new ChannelFactoryltIMyContractgt(binding address)
IMyContract proxy = factoryCreateChannel()proxyMyMethod() ((ICommunicationObject)proxy)Close()
Практика
Publish-Subscribe Pattern
PublisherPubSub
Service
Publish
Announcements
Endpoint
Discovery
Endpoint
Subscriber
HelloBye
Subscriber
Discover
PubSub
Discovery
EndpointDiscover
Subscribers
SOAP vs REST
prevContactIndex++
return Contacts[prevContactIndex]
SOAP ndash это выполнение операции
SOAP
Service
POST ServiceAccessMyService1svc
Host wwwsitecom
SOAPAction GetNextContact
hellip
ltsoapEnvelope xmlnssoap= hellip
hellip
ltsoapEnvelopegt
SOAP
Client
Contact Data
return GetContact(2)
REST ndash это запрос ресурса
REST
Service
GET sitecomMyService1svcContact(2)
REST
Client
Contact Data
Принципы REST
bull Пользователь взаимодействуют с ресурсами которыми может
быть всё что можно поименовать
bull Каждый ресурс имеет свой уникальный идентификатор ndash URI
bull Взаимодействие с ресурсами происходит по средствам HTTP
(команды GET POST PUT и DELETE)
bull Ресурсы описывают себя сами
bull Content-Type Content-Length hellip
bull В ресурсах могут содержатся ссылки на другие ресурсы
Ограничения REST
bull Stateless ndash отсутствие состояния у сервера Вся информация
необходимая для обработки запроса ресурса содержится в
самом запросе
bull Idempotent ndash повторное действие над объектом не
изменяет его
bull Side Effects ndash запрашивая значение объекта по GET не должно
происходить изменение этого или другого объекта
bull HTTP only
Интернет магазин
Клиенты
Клиент 1
Клиент 2
Счет 1
Счет 2
helliphellip
Клиент N
Ресурс URI
Клиенты mysitecomClients
Клиент mysitecomClientsClient
Счет mysitecomClientsClientaccount
hellip hellip
WebGet WebInvoke
bull WebGet ndash связывает метод с HTTP GET запросом
bull WebInvoke ndash все остальные HTTP запросы (POST PUT hellip)
bull UriTemplate ndash шаблон URI для связывания метода с запросом
Практика
OData
Протокол доступа к данным
основанный на REST
архитектуре
Адресация данных
bull Обращение к коллекции объектов
bull httpServicesvcCustomers
bull Обращение к объекту по PK
bull httpServicesvcCustomers(523)
bull Обращение к полю объекта
bull httpServicesvcCustomers(523)Name
bull Обращение к коллекции объектов с сортировкой
bull httpServicesvcCustomers$orderby=Name
bull Обращение к коллекции объектов с фильтрацией
bull httpServicesvcCustomers$filter=Created gt rsquo2008-01-01rsquo
bull Постарничный доступ
bull httpServicesvcCustomers$top=10amp$skip=20
Контроль доступаbull Видимость
bull Управление видимостью на уровне контейнера
объектов
bull Опции Read Query Write
bull Аутентификация
bull Интеграция с hosting-средой
bull ASPNET WCF пользовательская аутентификация
bull Перехватчики (interceptors)
bull Выполняются перед GETPUTPOSTDELETE
bull Включают валидацию и пользовательские
политики безопасности на уровне строк данных
Перехватчики
bull QueryInterceptor
bull ChangeInterceptor
[QueryInterceptor(Orders)]public ExpressionltFuncltOrder boolgtgt OnQueryOrders()
return o =gt oCustomerContactName == HttpContextCurrentUserIdentityName
[ChangeInterceptor(Products)]public void OnChangeProducts(Product product
UpdateOperations operations) if (operations == UpdateOperationsDelete)
throw new DataServiceException(400 Products cannot be deleted)
Конкурентный доступ
bull Optimistic concurrency
bull Интеграция с существующей
HTTP инфраструктурой
GET Customers(1)
200 ETagxx
PUTCustomers(1)
If-Match xx
201 ETagxx
OR
412 ETagxx
Практика
Итогиbull Работа со связанными сущностями
bull Модификация данных (GET POST PUT MERGE
DELETE)
bull Конкурентный доступ
bull Пакетная обработка
bull Сервисные операции
bull Различные источники данных
bull Безопасность ограничение видимости
bull Перехватчики
bull Различное представление данных
bull Клиентские прокси (NET PHP Java)
Все выше сказанное честно позаимствовано тут
bull MSDN Magazine
bull Extending WCF with Custom Behaviors
(httpmsdnmicrosoftcomen-usmagazinecc163302aspx)
bull WCF Bindings In Depth (httpmsdnmicrosoftcomen-
usmagazinecc163394aspx)
bull TechDaysru
bull DotNetCurrycom
bull DevCurrycom
bull Службы WCF Data Services
bull httpmsdnmicrosoftcomru-rulibrarycc668792aspx
Спасибо за внимание
WCF 40
bull WCF
bull Activation Service
bull Routing Service
bull WS-Discovery
bull Standard Endpoints
bull HTTP Decompression on Client (Gzip)
bull WCF REST
bull Caching
bull Auto select format
Обнаружение WCF
Клиент СервисСервис
Discovery
Request
Discovery
Endpoint
Discovery
Response
СервисСервис
Discovery
Endpoint
Discovery
Response
Discovery
Request
Discovery
Endpoint
Discovery
Response
Сервис
Оповещение ONOFF
Announcements
Endpoint
Сервис
HelloBye
СервисСервис
HelloBye
Discovery
Endpoint
Клиент
Сделаем сервис обнажаемымbull Программная реализация
bull Либо в конфигеltservicesgt
ltservice name = MyServicegtltendpoint kind=udpDiscoveryEndpoint gt
ltservicegtltservicesgtltbehaviorsgtltserviceBehaviorsgtltbehaviorgt
ltserviceDiscoverygtltbehaviorgt
ltserviceBehaviorsgtltbehaviorsgt
ServiceHost host = new ServiceHost()hostAddServiceEndpoint(new UdpDiscoveryEndpoint()) var discovery = new ServiceDiscoveryBehavior() hostDescriptionBehaviorsAdd(discovery)hostOpen()
kindbull UdpDiscoveryEndpoint
bull UpdAnnouncementEndpoint
bull DynamicEndpoint
Давайте найдем сервис
var discoveryClient =new DiscoveryClient(new UdpDiscoveryEndpoint())
FindCriteria criteria = new FindCriteria(typeof(IMyContract)) criteriaMaxResults = 1 FindResponse discovered = discoveryClientFind(criteria) discoveryClientClose()
EndpointAddress address = discoveredEndpoints[0]Address Binding binding = new NetTcpBinding() var factory = new ChannelFactoryltIMyContractgt(binding address)
IMyContract proxy = factoryCreateChannel()proxyMyMethod() ((ICommunicationObject)proxy)Close()
Практика
Publish-Subscribe Pattern
PublisherPubSub
Service
Publish
Announcements
Endpoint
Discovery
Endpoint
Subscriber
HelloBye
Subscriber
Discover
PubSub
Discovery
EndpointDiscover
Subscribers
SOAP vs REST
prevContactIndex++
return Contacts[prevContactIndex]
SOAP ndash это выполнение операции
SOAP
Service
POST ServiceAccessMyService1svc
Host wwwsitecom
SOAPAction GetNextContact
hellip
ltsoapEnvelope xmlnssoap= hellip
hellip
ltsoapEnvelopegt
SOAP
Client
Contact Data
return GetContact(2)
REST ndash это запрос ресурса
REST
Service
GET sitecomMyService1svcContact(2)
REST
Client
Contact Data
Принципы REST
bull Пользователь взаимодействуют с ресурсами которыми может
быть всё что можно поименовать
bull Каждый ресурс имеет свой уникальный идентификатор ndash URI
bull Взаимодействие с ресурсами происходит по средствам HTTP
(команды GET POST PUT и DELETE)
bull Ресурсы описывают себя сами
bull Content-Type Content-Length hellip
bull В ресурсах могут содержатся ссылки на другие ресурсы
Ограничения REST
bull Stateless ndash отсутствие состояния у сервера Вся информация
необходимая для обработки запроса ресурса содержится в
самом запросе
bull Idempotent ndash повторное действие над объектом не
изменяет его
bull Side Effects ndash запрашивая значение объекта по GET не должно
происходить изменение этого или другого объекта
bull HTTP only
Интернет магазин
Клиенты
Клиент 1
Клиент 2
Счет 1
Счет 2
helliphellip
Клиент N
Ресурс URI
Клиенты mysitecomClients
Клиент mysitecomClientsClient
Счет mysitecomClientsClientaccount
hellip hellip
WebGet WebInvoke
bull WebGet ndash связывает метод с HTTP GET запросом
bull WebInvoke ndash все остальные HTTP запросы (POST PUT hellip)
bull UriTemplate ndash шаблон URI для связывания метода с запросом
Практика
OData
Протокол доступа к данным
основанный на REST
архитектуре
Адресация данных
bull Обращение к коллекции объектов
bull httpServicesvcCustomers
bull Обращение к объекту по PK
bull httpServicesvcCustomers(523)
bull Обращение к полю объекта
bull httpServicesvcCustomers(523)Name
bull Обращение к коллекции объектов с сортировкой
bull httpServicesvcCustomers$orderby=Name
bull Обращение к коллекции объектов с фильтрацией
bull httpServicesvcCustomers$filter=Created gt rsquo2008-01-01rsquo
bull Постарничный доступ
bull httpServicesvcCustomers$top=10amp$skip=20
Контроль доступаbull Видимость
bull Управление видимостью на уровне контейнера
объектов
bull Опции Read Query Write
bull Аутентификация
bull Интеграция с hosting-средой
bull ASPNET WCF пользовательская аутентификация
bull Перехватчики (interceptors)
bull Выполняются перед GETPUTPOSTDELETE
bull Включают валидацию и пользовательские
политики безопасности на уровне строк данных
Перехватчики
bull QueryInterceptor
bull ChangeInterceptor
[QueryInterceptor(Orders)]public ExpressionltFuncltOrder boolgtgt OnQueryOrders()
return o =gt oCustomerContactName == HttpContextCurrentUserIdentityName
[ChangeInterceptor(Products)]public void OnChangeProducts(Product product
UpdateOperations operations) if (operations == UpdateOperationsDelete)
throw new DataServiceException(400 Products cannot be deleted)
Конкурентный доступ
bull Optimistic concurrency
bull Интеграция с существующей
HTTP инфраструктурой
GET Customers(1)
200 ETagxx
PUTCustomers(1)
If-Match xx
201 ETagxx
OR
412 ETagxx
Практика
Итогиbull Работа со связанными сущностями
bull Модификация данных (GET POST PUT MERGE
DELETE)
bull Конкурентный доступ
bull Пакетная обработка
bull Сервисные операции
bull Различные источники данных
bull Безопасность ограничение видимости
bull Перехватчики
bull Различное представление данных
bull Клиентские прокси (NET PHP Java)
Все выше сказанное честно позаимствовано тут
bull MSDN Magazine
bull Extending WCF with Custom Behaviors
(httpmsdnmicrosoftcomen-usmagazinecc163302aspx)
bull WCF Bindings In Depth (httpmsdnmicrosoftcomen-
usmagazinecc163394aspx)
bull TechDaysru
bull DotNetCurrycom
bull DevCurrycom
bull Службы WCF Data Services
bull httpmsdnmicrosoftcomru-rulibrarycc668792aspx
Спасибо за внимание
Обнаружение WCF
Клиент СервисСервис
Discovery
Request
Discovery
Endpoint
Discovery
Response
СервисСервис
Discovery
Endpoint
Discovery
Response
Discovery
Request
Discovery
Endpoint
Discovery
Response
Сервис
Оповещение ONOFF
Announcements
Endpoint
Сервис
HelloBye
СервисСервис
HelloBye
Discovery
Endpoint
Клиент
Сделаем сервис обнажаемымbull Программная реализация
bull Либо в конфигеltservicesgt
ltservice name = MyServicegtltendpoint kind=udpDiscoveryEndpoint gt
ltservicegtltservicesgtltbehaviorsgtltserviceBehaviorsgtltbehaviorgt
ltserviceDiscoverygtltbehaviorgt
ltserviceBehaviorsgtltbehaviorsgt
ServiceHost host = new ServiceHost()hostAddServiceEndpoint(new UdpDiscoveryEndpoint()) var discovery = new ServiceDiscoveryBehavior() hostDescriptionBehaviorsAdd(discovery)hostOpen()
kindbull UdpDiscoveryEndpoint
bull UpdAnnouncementEndpoint
bull DynamicEndpoint
Давайте найдем сервис
var discoveryClient =new DiscoveryClient(new UdpDiscoveryEndpoint())
FindCriteria criteria = new FindCriteria(typeof(IMyContract)) criteriaMaxResults = 1 FindResponse discovered = discoveryClientFind(criteria) discoveryClientClose()
EndpointAddress address = discoveredEndpoints[0]Address Binding binding = new NetTcpBinding() var factory = new ChannelFactoryltIMyContractgt(binding address)
IMyContract proxy = factoryCreateChannel()proxyMyMethod() ((ICommunicationObject)proxy)Close()
Практика
Publish-Subscribe Pattern
PublisherPubSub
Service
Publish
Announcements
Endpoint
Discovery
Endpoint
Subscriber
HelloBye
Subscriber
Discover
PubSub
Discovery
EndpointDiscover
Subscribers
SOAP vs REST
prevContactIndex++
return Contacts[prevContactIndex]
SOAP ndash это выполнение операции
SOAP
Service
POST ServiceAccessMyService1svc
Host wwwsitecom
SOAPAction GetNextContact
hellip
ltsoapEnvelope xmlnssoap= hellip
hellip
ltsoapEnvelopegt
SOAP
Client
Contact Data
return GetContact(2)
REST ndash это запрос ресурса
REST
Service
GET sitecomMyService1svcContact(2)
REST
Client
Contact Data
Принципы REST
bull Пользователь взаимодействуют с ресурсами которыми может
быть всё что можно поименовать
bull Каждый ресурс имеет свой уникальный идентификатор ndash URI
bull Взаимодействие с ресурсами происходит по средствам HTTP
(команды GET POST PUT и DELETE)
bull Ресурсы описывают себя сами
bull Content-Type Content-Length hellip
bull В ресурсах могут содержатся ссылки на другие ресурсы
Ограничения REST
bull Stateless ndash отсутствие состояния у сервера Вся информация
необходимая для обработки запроса ресурса содержится в
самом запросе
bull Idempotent ndash повторное действие над объектом не
изменяет его
bull Side Effects ndash запрашивая значение объекта по GET не должно
происходить изменение этого или другого объекта
bull HTTP only
Интернет магазин
Клиенты
Клиент 1
Клиент 2
Счет 1
Счет 2
helliphellip
Клиент N
Ресурс URI
Клиенты mysitecomClients
Клиент mysitecomClientsClient
Счет mysitecomClientsClientaccount
hellip hellip
WebGet WebInvoke
bull WebGet ndash связывает метод с HTTP GET запросом
bull WebInvoke ndash все остальные HTTP запросы (POST PUT hellip)
bull UriTemplate ndash шаблон URI для связывания метода с запросом
Практика
OData
Протокол доступа к данным
основанный на REST
архитектуре
Адресация данных
bull Обращение к коллекции объектов
bull httpServicesvcCustomers
bull Обращение к объекту по PK
bull httpServicesvcCustomers(523)
bull Обращение к полю объекта
bull httpServicesvcCustomers(523)Name
bull Обращение к коллекции объектов с сортировкой
bull httpServicesvcCustomers$orderby=Name
bull Обращение к коллекции объектов с фильтрацией
bull httpServicesvcCustomers$filter=Created gt rsquo2008-01-01rsquo
bull Постарничный доступ
bull httpServicesvcCustomers$top=10amp$skip=20
Контроль доступаbull Видимость
bull Управление видимостью на уровне контейнера
объектов
bull Опции Read Query Write
bull Аутентификация
bull Интеграция с hosting-средой
bull ASPNET WCF пользовательская аутентификация
bull Перехватчики (interceptors)
bull Выполняются перед GETPUTPOSTDELETE
bull Включают валидацию и пользовательские
политики безопасности на уровне строк данных
Перехватчики
bull QueryInterceptor
bull ChangeInterceptor
[QueryInterceptor(Orders)]public ExpressionltFuncltOrder boolgtgt OnQueryOrders()
return o =gt oCustomerContactName == HttpContextCurrentUserIdentityName
[ChangeInterceptor(Products)]public void OnChangeProducts(Product product
UpdateOperations operations) if (operations == UpdateOperationsDelete)
throw new DataServiceException(400 Products cannot be deleted)
Конкурентный доступ
bull Optimistic concurrency
bull Интеграция с существующей
HTTP инфраструктурой
GET Customers(1)
200 ETagxx
PUTCustomers(1)
If-Match xx
201 ETagxx
OR
412 ETagxx
Практика
Итогиbull Работа со связанными сущностями
bull Модификация данных (GET POST PUT MERGE
DELETE)
bull Конкурентный доступ
bull Пакетная обработка
bull Сервисные операции
bull Различные источники данных
bull Безопасность ограничение видимости
bull Перехватчики
bull Различное представление данных
bull Клиентские прокси (NET PHP Java)
Все выше сказанное честно позаимствовано тут
bull MSDN Magazine
bull Extending WCF with Custom Behaviors
(httpmsdnmicrosoftcomen-usmagazinecc163302aspx)
bull WCF Bindings In Depth (httpmsdnmicrosoftcomen-
usmagazinecc163394aspx)
bull TechDaysru
bull DotNetCurrycom
bull DevCurrycom
bull Службы WCF Data Services
bull httpmsdnmicrosoftcomru-rulibrarycc668792aspx
Спасибо за внимание
Сервис
Оповещение ONOFF
Announcements
Endpoint
Сервис
HelloBye
СервисСервис
HelloBye
Discovery
Endpoint
Клиент
Сделаем сервис обнажаемымbull Программная реализация
bull Либо в конфигеltservicesgt
ltservice name = MyServicegtltendpoint kind=udpDiscoveryEndpoint gt
ltservicegtltservicesgtltbehaviorsgtltserviceBehaviorsgtltbehaviorgt
ltserviceDiscoverygtltbehaviorgt
ltserviceBehaviorsgtltbehaviorsgt
ServiceHost host = new ServiceHost()hostAddServiceEndpoint(new UdpDiscoveryEndpoint()) var discovery = new ServiceDiscoveryBehavior() hostDescriptionBehaviorsAdd(discovery)hostOpen()
kindbull UdpDiscoveryEndpoint
bull UpdAnnouncementEndpoint
bull DynamicEndpoint
Давайте найдем сервис
var discoveryClient =new DiscoveryClient(new UdpDiscoveryEndpoint())
FindCriteria criteria = new FindCriteria(typeof(IMyContract)) criteriaMaxResults = 1 FindResponse discovered = discoveryClientFind(criteria) discoveryClientClose()
EndpointAddress address = discoveredEndpoints[0]Address Binding binding = new NetTcpBinding() var factory = new ChannelFactoryltIMyContractgt(binding address)
IMyContract proxy = factoryCreateChannel()proxyMyMethod() ((ICommunicationObject)proxy)Close()
Практика
Publish-Subscribe Pattern
PublisherPubSub
Service
Publish
Announcements
Endpoint
Discovery
Endpoint
Subscriber
HelloBye
Subscriber
Discover
PubSub
Discovery
EndpointDiscover
Subscribers
SOAP vs REST
prevContactIndex++
return Contacts[prevContactIndex]
SOAP ndash это выполнение операции
SOAP
Service
POST ServiceAccessMyService1svc
Host wwwsitecom
SOAPAction GetNextContact
hellip
ltsoapEnvelope xmlnssoap= hellip
hellip
ltsoapEnvelopegt
SOAP
Client
Contact Data
return GetContact(2)
REST ndash это запрос ресурса
REST
Service
GET sitecomMyService1svcContact(2)
REST
Client
Contact Data
Принципы REST
bull Пользователь взаимодействуют с ресурсами которыми может
быть всё что можно поименовать
bull Каждый ресурс имеет свой уникальный идентификатор ndash URI
bull Взаимодействие с ресурсами происходит по средствам HTTP
(команды GET POST PUT и DELETE)
bull Ресурсы описывают себя сами
bull Content-Type Content-Length hellip
bull В ресурсах могут содержатся ссылки на другие ресурсы
Ограничения REST
bull Stateless ndash отсутствие состояния у сервера Вся информация
необходимая для обработки запроса ресурса содержится в
самом запросе
bull Idempotent ndash повторное действие над объектом не
изменяет его
bull Side Effects ndash запрашивая значение объекта по GET не должно
происходить изменение этого или другого объекта
bull HTTP only
Интернет магазин
Клиенты
Клиент 1
Клиент 2
Счет 1
Счет 2
helliphellip
Клиент N
Ресурс URI
Клиенты mysitecomClients
Клиент mysitecomClientsClient
Счет mysitecomClientsClientaccount
hellip hellip
WebGet WebInvoke
bull WebGet ndash связывает метод с HTTP GET запросом
bull WebInvoke ndash все остальные HTTP запросы (POST PUT hellip)
bull UriTemplate ndash шаблон URI для связывания метода с запросом
Практика
OData
Протокол доступа к данным
основанный на REST
архитектуре
Адресация данных
bull Обращение к коллекции объектов
bull httpServicesvcCustomers
bull Обращение к объекту по PK
bull httpServicesvcCustomers(523)
bull Обращение к полю объекта
bull httpServicesvcCustomers(523)Name
bull Обращение к коллекции объектов с сортировкой
bull httpServicesvcCustomers$orderby=Name
bull Обращение к коллекции объектов с фильтрацией
bull httpServicesvcCustomers$filter=Created gt rsquo2008-01-01rsquo
bull Постарничный доступ
bull httpServicesvcCustomers$top=10amp$skip=20
Контроль доступаbull Видимость
bull Управление видимостью на уровне контейнера
объектов
bull Опции Read Query Write
bull Аутентификация
bull Интеграция с hosting-средой
bull ASPNET WCF пользовательская аутентификация
bull Перехватчики (interceptors)
bull Выполняются перед GETPUTPOSTDELETE
bull Включают валидацию и пользовательские
политики безопасности на уровне строк данных
Перехватчики
bull QueryInterceptor
bull ChangeInterceptor
[QueryInterceptor(Orders)]public ExpressionltFuncltOrder boolgtgt OnQueryOrders()
return o =gt oCustomerContactName == HttpContextCurrentUserIdentityName
[ChangeInterceptor(Products)]public void OnChangeProducts(Product product
UpdateOperations operations) if (operations == UpdateOperationsDelete)
throw new DataServiceException(400 Products cannot be deleted)
Конкурентный доступ
bull Optimistic concurrency
bull Интеграция с существующей
HTTP инфраструктурой
GET Customers(1)
200 ETagxx
PUTCustomers(1)
If-Match xx
201 ETagxx
OR
412 ETagxx
Практика
Итогиbull Работа со связанными сущностями
bull Модификация данных (GET POST PUT MERGE
DELETE)
bull Конкурентный доступ
bull Пакетная обработка
bull Сервисные операции
bull Различные источники данных
bull Безопасность ограничение видимости
bull Перехватчики
bull Различное представление данных
bull Клиентские прокси (NET PHP Java)
Все выше сказанное честно позаимствовано тут
bull MSDN Magazine
bull Extending WCF with Custom Behaviors
(httpmsdnmicrosoftcomen-usmagazinecc163302aspx)
bull WCF Bindings In Depth (httpmsdnmicrosoftcomen-
usmagazinecc163394aspx)
bull TechDaysru
bull DotNetCurrycom
bull DevCurrycom
bull Службы WCF Data Services
bull httpmsdnmicrosoftcomru-rulibrarycc668792aspx
Спасибо за внимание
Сделаем сервис обнажаемымbull Программная реализация
bull Либо в конфигеltservicesgt
ltservice name = MyServicegtltendpoint kind=udpDiscoveryEndpoint gt
ltservicegtltservicesgtltbehaviorsgtltserviceBehaviorsgtltbehaviorgt
ltserviceDiscoverygtltbehaviorgt
ltserviceBehaviorsgtltbehaviorsgt
ServiceHost host = new ServiceHost()hostAddServiceEndpoint(new UdpDiscoveryEndpoint()) var discovery = new ServiceDiscoveryBehavior() hostDescriptionBehaviorsAdd(discovery)hostOpen()
kindbull UdpDiscoveryEndpoint
bull UpdAnnouncementEndpoint
bull DynamicEndpoint
Давайте найдем сервис
var discoveryClient =new DiscoveryClient(new UdpDiscoveryEndpoint())
FindCriteria criteria = new FindCriteria(typeof(IMyContract)) criteriaMaxResults = 1 FindResponse discovered = discoveryClientFind(criteria) discoveryClientClose()
EndpointAddress address = discoveredEndpoints[0]Address Binding binding = new NetTcpBinding() var factory = new ChannelFactoryltIMyContractgt(binding address)
IMyContract proxy = factoryCreateChannel()proxyMyMethod() ((ICommunicationObject)proxy)Close()
Практика
Publish-Subscribe Pattern
PublisherPubSub
Service
Publish
Announcements
Endpoint
Discovery
Endpoint
Subscriber
HelloBye
Subscriber
Discover
PubSub
Discovery
EndpointDiscover
Subscribers
SOAP vs REST
prevContactIndex++
return Contacts[prevContactIndex]
SOAP ndash это выполнение операции
SOAP
Service
POST ServiceAccessMyService1svc
Host wwwsitecom
SOAPAction GetNextContact
hellip
ltsoapEnvelope xmlnssoap= hellip
hellip
ltsoapEnvelopegt
SOAP
Client
Contact Data
return GetContact(2)
REST ndash это запрос ресурса
REST
Service
GET sitecomMyService1svcContact(2)
REST
Client
Contact Data
Принципы REST
bull Пользователь взаимодействуют с ресурсами которыми может
быть всё что можно поименовать
bull Каждый ресурс имеет свой уникальный идентификатор ndash URI
bull Взаимодействие с ресурсами происходит по средствам HTTP
(команды GET POST PUT и DELETE)
bull Ресурсы описывают себя сами
bull Content-Type Content-Length hellip
bull В ресурсах могут содержатся ссылки на другие ресурсы
Ограничения REST
bull Stateless ndash отсутствие состояния у сервера Вся информация
необходимая для обработки запроса ресурса содержится в
самом запросе
bull Idempotent ndash повторное действие над объектом не
изменяет его
bull Side Effects ndash запрашивая значение объекта по GET не должно
происходить изменение этого или другого объекта
bull HTTP only
Интернет магазин
Клиенты
Клиент 1
Клиент 2
Счет 1
Счет 2
helliphellip
Клиент N
Ресурс URI
Клиенты mysitecomClients
Клиент mysitecomClientsClient
Счет mysitecomClientsClientaccount
hellip hellip
WebGet WebInvoke
bull WebGet ndash связывает метод с HTTP GET запросом
bull WebInvoke ndash все остальные HTTP запросы (POST PUT hellip)
bull UriTemplate ndash шаблон URI для связывания метода с запросом
Практика
OData
Протокол доступа к данным
основанный на REST
архитектуре
Адресация данных
bull Обращение к коллекции объектов
bull httpServicesvcCustomers
bull Обращение к объекту по PK
bull httpServicesvcCustomers(523)
bull Обращение к полю объекта
bull httpServicesvcCustomers(523)Name
bull Обращение к коллекции объектов с сортировкой
bull httpServicesvcCustomers$orderby=Name
bull Обращение к коллекции объектов с фильтрацией
bull httpServicesvcCustomers$filter=Created gt rsquo2008-01-01rsquo
bull Постарничный доступ
bull httpServicesvcCustomers$top=10amp$skip=20
Контроль доступаbull Видимость
bull Управление видимостью на уровне контейнера
объектов
bull Опции Read Query Write
bull Аутентификация
bull Интеграция с hosting-средой
bull ASPNET WCF пользовательская аутентификация
bull Перехватчики (interceptors)
bull Выполняются перед GETPUTPOSTDELETE
bull Включают валидацию и пользовательские
политики безопасности на уровне строк данных
Перехватчики
bull QueryInterceptor
bull ChangeInterceptor
[QueryInterceptor(Orders)]public ExpressionltFuncltOrder boolgtgt OnQueryOrders()
return o =gt oCustomerContactName == HttpContextCurrentUserIdentityName
[ChangeInterceptor(Products)]public void OnChangeProducts(Product product
UpdateOperations operations) if (operations == UpdateOperationsDelete)
throw new DataServiceException(400 Products cannot be deleted)
Конкурентный доступ
bull Optimistic concurrency
bull Интеграция с существующей
HTTP инфраструктурой
GET Customers(1)
200 ETagxx
PUTCustomers(1)
If-Match xx
201 ETagxx
OR
412 ETagxx
Практика
Итогиbull Работа со связанными сущностями
bull Модификация данных (GET POST PUT MERGE
DELETE)
bull Конкурентный доступ
bull Пакетная обработка
bull Сервисные операции
bull Различные источники данных
bull Безопасность ограничение видимости
bull Перехватчики
bull Различное представление данных
bull Клиентские прокси (NET PHP Java)
Все выше сказанное честно позаимствовано тут
bull MSDN Magazine
bull Extending WCF with Custom Behaviors
(httpmsdnmicrosoftcomen-usmagazinecc163302aspx)
bull WCF Bindings In Depth (httpmsdnmicrosoftcomen-
usmagazinecc163394aspx)
bull TechDaysru
bull DotNetCurrycom
bull DevCurrycom
bull Службы WCF Data Services
bull httpmsdnmicrosoftcomru-rulibrarycc668792aspx
Спасибо за внимание
Давайте найдем сервис
var discoveryClient =new DiscoveryClient(new UdpDiscoveryEndpoint())
FindCriteria criteria = new FindCriteria(typeof(IMyContract)) criteriaMaxResults = 1 FindResponse discovered = discoveryClientFind(criteria) discoveryClientClose()
EndpointAddress address = discoveredEndpoints[0]Address Binding binding = new NetTcpBinding() var factory = new ChannelFactoryltIMyContractgt(binding address)
IMyContract proxy = factoryCreateChannel()proxyMyMethod() ((ICommunicationObject)proxy)Close()
Практика
Publish-Subscribe Pattern
PublisherPubSub
Service
Publish
Announcements
Endpoint
Discovery
Endpoint
Subscriber
HelloBye
Subscriber
Discover
PubSub
Discovery
EndpointDiscover
Subscribers
SOAP vs REST
prevContactIndex++
return Contacts[prevContactIndex]
SOAP ndash это выполнение операции
SOAP
Service
POST ServiceAccessMyService1svc
Host wwwsitecom
SOAPAction GetNextContact
hellip
ltsoapEnvelope xmlnssoap= hellip
hellip
ltsoapEnvelopegt
SOAP
Client
Contact Data
return GetContact(2)
REST ndash это запрос ресурса
REST
Service
GET sitecomMyService1svcContact(2)
REST
Client
Contact Data
Принципы REST
bull Пользователь взаимодействуют с ресурсами которыми может
быть всё что можно поименовать
bull Каждый ресурс имеет свой уникальный идентификатор ndash URI
bull Взаимодействие с ресурсами происходит по средствам HTTP
(команды GET POST PUT и DELETE)
bull Ресурсы описывают себя сами
bull Content-Type Content-Length hellip
bull В ресурсах могут содержатся ссылки на другие ресурсы
Ограничения REST
bull Stateless ndash отсутствие состояния у сервера Вся информация
необходимая для обработки запроса ресурса содержится в
самом запросе
bull Idempotent ndash повторное действие над объектом не
изменяет его
bull Side Effects ndash запрашивая значение объекта по GET не должно
происходить изменение этого или другого объекта
bull HTTP only
Интернет магазин
Клиенты
Клиент 1
Клиент 2
Счет 1
Счет 2
helliphellip
Клиент N
Ресурс URI
Клиенты mysitecomClients
Клиент mysitecomClientsClient
Счет mysitecomClientsClientaccount
hellip hellip
WebGet WebInvoke
bull WebGet ndash связывает метод с HTTP GET запросом
bull WebInvoke ndash все остальные HTTP запросы (POST PUT hellip)
bull UriTemplate ndash шаблон URI для связывания метода с запросом
Практика
OData
Протокол доступа к данным
основанный на REST
архитектуре
Адресация данных
bull Обращение к коллекции объектов
bull httpServicesvcCustomers
bull Обращение к объекту по PK
bull httpServicesvcCustomers(523)
bull Обращение к полю объекта
bull httpServicesvcCustomers(523)Name
bull Обращение к коллекции объектов с сортировкой
bull httpServicesvcCustomers$orderby=Name
bull Обращение к коллекции объектов с фильтрацией
bull httpServicesvcCustomers$filter=Created gt rsquo2008-01-01rsquo
bull Постарничный доступ
bull httpServicesvcCustomers$top=10amp$skip=20
Контроль доступаbull Видимость
bull Управление видимостью на уровне контейнера
объектов
bull Опции Read Query Write
bull Аутентификация
bull Интеграция с hosting-средой
bull ASPNET WCF пользовательская аутентификация
bull Перехватчики (interceptors)
bull Выполняются перед GETPUTPOSTDELETE
bull Включают валидацию и пользовательские
политики безопасности на уровне строк данных
Перехватчики
bull QueryInterceptor
bull ChangeInterceptor
[QueryInterceptor(Orders)]public ExpressionltFuncltOrder boolgtgt OnQueryOrders()
return o =gt oCustomerContactName == HttpContextCurrentUserIdentityName
[ChangeInterceptor(Products)]public void OnChangeProducts(Product product
UpdateOperations operations) if (operations == UpdateOperationsDelete)
throw new DataServiceException(400 Products cannot be deleted)
Конкурентный доступ
bull Optimistic concurrency
bull Интеграция с существующей
HTTP инфраструктурой
GET Customers(1)
200 ETagxx
PUTCustomers(1)
If-Match xx
201 ETagxx
OR
412 ETagxx
Практика
Итогиbull Работа со связанными сущностями
bull Модификация данных (GET POST PUT MERGE
DELETE)
bull Конкурентный доступ
bull Пакетная обработка
bull Сервисные операции
bull Различные источники данных
bull Безопасность ограничение видимости
bull Перехватчики
bull Различное представление данных
bull Клиентские прокси (NET PHP Java)
Все выше сказанное честно позаимствовано тут
bull MSDN Magazine
bull Extending WCF with Custom Behaviors
(httpmsdnmicrosoftcomen-usmagazinecc163302aspx)
bull WCF Bindings In Depth (httpmsdnmicrosoftcomen-
usmagazinecc163394aspx)
bull TechDaysru
bull DotNetCurrycom
bull DevCurrycom
bull Службы WCF Data Services
bull httpmsdnmicrosoftcomru-rulibrarycc668792aspx
Спасибо за внимание
Практика
Publish-Subscribe Pattern
PublisherPubSub
Service
Publish
Announcements
Endpoint
Discovery
Endpoint
Subscriber
HelloBye
Subscriber
Discover
PubSub
Discovery
EndpointDiscover
Subscribers
SOAP vs REST
prevContactIndex++
return Contacts[prevContactIndex]
SOAP ndash это выполнение операции
SOAP
Service
POST ServiceAccessMyService1svc
Host wwwsitecom
SOAPAction GetNextContact
hellip
ltsoapEnvelope xmlnssoap= hellip
hellip
ltsoapEnvelopegt
SOAP
Client
Contact Data
return GetContact(2)
REST ndash это запрос ресурса
REST
Service
GET sitecomMyService1svcContact(2)
REST
Client
Contact Data
Принципы REST
bull Пользователь взаимодействуют с ресурсами которыми может
быть всё что можно поименовать
bull Каждый ресурс имеет свой уникальный идентификатор ndash URI
bull Взаимодействие с ресурсами происходит по средствам HTTP
(команды GET POST PUT и DELETE)
bull Ресурсы описывают себя сами
bull Content-Type Content-Length hellip
bull В ресурсах могут содержатся ссылки на другие ресурсы
Ограничения REST
bull Stateless ndash отсутствие состояния у сервера Вся информация
необходимая для обработки запроса ресурса содержится в
самом запросе
bull Idempotent ndash повторное действие над объектом не
изменяет его
bull Side Effects ndash запрашивая значение объекта по GET не должно
происходить изменение этого или другого объекта
bull HTTP only
Интернет магазин
Клиенты
Клиент 1
Клиент 2
Счет 1
Счет 2
helliphellip
Клиент N
Ресурс URI
Клиенты mysitecomClients
Клиент mysitecomClientsClient
Счет mysitecomClientsClientaccount
hellip hellip
WebGet WebInvoke
bull WebGet ndash связывает метод с HTTP GET запросом
bull WebInvoke ndash все остальные HTTP запросы (POST PUT hellip)
bull UriTemplate ndash шаблон URI для связывания метода с запросом
Практика
OData
Протокол доступа к данным
основанный на REST
архитектуре
Адресация данных
bull Обращение к коллекции объектов
bull httpServicesvcCustomers
bull Обращение к объекту по PK
bull httpServicesvcCustomers(523)
bull Обращение к полю объекта
bull httpServicesvcCustomers(523)Name
bull Обращение к коллекции объектов с сортировкой
bull httpServicesvcCustomers$orderby=Name
bull Обращение к коллекции объектов с фильтрацией
bull httpServicesvcCustomers$filter=Created gt rsquo2008-01-01rsquo
bull Постарничный доступ
bull httpServicesvcCustomers$top=10amp$skip=20
Контроль доступаbull Видимость
bull Управление видимостью на уровне контейнера
объектов
bull Опции Read Query Write
bull Аутентификация
bull Интеграция с hosting-средой
bull ASPNET WCF пользовательская аутентификация
bull Перехватчики (interceptors)
bull Выполняются перед GETPUTPOSTDELETE
bull Включают валидацию и пользовательские
политики безопасности на уровне строк данных
Перехватчики
bull QueryInterceptor
bull ChangeInterceptor
[QueryInterceptor(Orders)]public ExpressionltFuncltOrder boolgtgt OnQueryOrders()
return o =gt oCustomerContactName == HttpContextCurrentUserIdentityName
[ChangeInterceptor(Products)]public void OnChangeProducts(Product product
UpdateOperations operations) if (operations == UpdateOperationsDelete)
throw new DataServiceException(400 Products cannot be deleted)
Конкурентный доступ
bull Optimistic concurrency
bull Интеграция с существующей
HTTP инфраструктурой
GET Customers(1)
200 ETagxx
PUTCustomers(1)
If-Match xx
201 ETagxx
OR
412 ETagxx
Практика
Итогиbull Работа со связанными сущностями
bull Модификация данных (GET POST PUT MERGE
DELETE)
bull Конкурентный доступ
bull Пакетная обработка
bull Сервисные операции
bull Различные источники данных
bull Безопасность ограничение видимости
bull Перехватчики
bull Различное представление данных
bull Клиентские прокси (NET PHP Java)
Все выше сказанное честно позаимствовано тут
bull MSDN Magazine
bull Extending WCF with Custom Behaviors
(httpmsdnmicrosoftcomen-usmagazinecc163302aspx)
bull WCF Bindings In Depth (httpmsdnmicrosoftcomen-
usmagazinecc163394aspx)
bull TechDaysru
bull DotNetCurrycom
bull DevCurrycom
bull Службы WCF Data Services
bull httpmsdnmicrosoftcomru-rulibrarycc668792aspx
Спасибо за внимание
Publish-Subscribe Pattern
PublisherPubSub
Service
Publish
Announcements
Endpoint
Discovery
Endpoint
Subscriber
HelloBye
Subscriber
Discover
PubSub
Discovery
EndpointDiscover
Subscribers
SOAP vs REST
prevContactIndex++
return Contacts[prevContactIndex]
SOAP ndash это выполнение операции
SOAP
Service
POST ServiceAccessMyService1svc
Host wwwsitecom
SOAPAction GetNextContact
hellip
ltsoapEnvelope xmlnssoap= hellip
hellip
ltsoapEnvelopegt
SOAP
Client
Contact Data
return GetContact(2)
REST ndash это запрос ресурса
REST
Service
GET sitecomMyService1svcContact(2)
REST
Client
Contact Data
Принципы REST
bull Пользователь взаимодействуют с ресурсами которыми может
быть всё что можно поименовать
bull Каждый ресурс имеет свой уникальный идентификатор ndash URI
bull Взаимодействие с ресурсами происходит по средствам HTTP
(команды GET POST PUT и DELETE)
bull Ресурсы описывают себя сами
bull Content-Type Content-Length hellip
bull В ресурсах могут содержатся ссылки на другие ресурсы
Ограничения REST
bull Stateless ndash отсутствие состояния у сервера Вся информация
необходимая для обработки запроса ресурса содержится в
самом запросе
bull Idempotent ndash повторное действие над объектом не
изменяет его
bull Side Effects ndash запрашивая значение объекта по GET не должно
происходить изменение этого или другого объекта
bull HTTP only
Интернет магазин
Клиенты
Клиент 1
Клиент 2
Счет 1
Счет 2
helliphellip
Клиент N
Ресурс URI
Клиенты mysitecomClients
Клиент mysitecomClientsClient
Счет mysitecomClientsClientaccount
hellip hellip
WebGet WebInvoke
bull WebGet ndash связывает метод с HTTP GET запросом
bull WebInvoke ndash все остальные HTTP запросы (POST PUT hellip)
bull UriTemplate ndash шаблон URI для связывания метода с запросом
Практика
OData
Протокол доступа к данным
основанный на REST
архитектуре
Адресация данных
bull Обращение к коллекции объектов
bull httpServicesvcCustomers
bull Обращение к объекту по PK
bull httpServicesvcCustomers(523)
bull Обращение к полю объекта
bull httpServicesvcCustomers(523)Name
bull Обращение к коллекции объектов с сортировкой
bull httpServicesvcCustomers$orderby=Name
bull Обращение к коллекции объектов с фильтрацией
bull httpServicesvcCustomers$filter=Created gt rsquo2008-01-01rsquo
bull Постарничный доступ
bull httpServicesvcCustomers$top=10amp$skip=20
Контроль доступаbull Видимость
bull Управление видимостью на уровне контейнера
объектов
bull Опции Read Query Write
bull Аутентификация
bull Интеграция с hosting-средой
bull ASPNET WCF пользовательская аутентификация
bull Перехватчики (interceptors)
bull Выполняются перед GETPUTPOSTDELETE
bull Включают валидацию и пользовательские
политики безопасности на уровне строк данных
Перехватчики
bull QueryInterceptor
bull ChangeInterceptor
[QueryInterceptor(Orders)]public ExpressionltFuncltOrder boolgtgt OnQueryOrders()
return o =gt oCustomerContactName == HttpContextCurrentUserIdentityName
[ChangeInterceptor(Products)]public void OnChangeProducts(Product product
UpdateOperations operations) if (operations == UpdateOperationsDelete)
throw new DataServiceException(400 Products cannot be deleted)
Конкурентный доступ
bull Optimistic concurrency
bull Интеграция с существующей
HTTP инфраструктурой
GET Customers(1)
200 ETagxx
PUTCustomers(1)
If-Match xx
201 ETagxx
OR
412 ETagxx
Практика
Итогиbull Работа со связанными сущностями
bull Модификация данных (GET POST PUT MERGE
DELETE)
bull Конкурентный доступ
bull Пакетная обработка
bull Сервисные операции
bull Различные источники данных
bull Безопасность ограничение видимости
bull Перехватчики
bull Различное представление данных
bull Клиентские прокси (NET PHP Java)
Все выше сказанное честно позаимствовано тут
bull MSDN Magazine
bull Extending WCF with Custom Behaviors
(httpmsdnmicrosoftcomen-usmagazinecc163302aspx)
bull WCF Bindings In Depth (httpmsdnmicrosoftcomen-
usmagazinecc163394aspx)
bull TechDaysru
bull DotNetCurrycom
bull DevCurrycom
bull Службы WCF Data Services
bull httpmsdnmicrosoftcomru-rulibrarycc668792aspx
Спасибо за внимание
SOAP vs REST
prevContactIndex++
return Contacts[prevContactIndex]
SOAP ndash это выполнение операции
SOAP
Service
POST ServiceAccessMyService1svc
Host wwwsitecom
SOAPAction GetNextContact
hellip
ltsoapEnvelope xmlnssoap= hellip
hellip
ltsoapEnvelopegt
SOAP
Client
Contact Data
return GetContact(2)
REST ndash это запрос ресурса
REST
Service
GET sitecomMyService1svcContact(2)
REST
Client
Contact Data
Принципы REST
bull Пользователь взаимодействуют с ресурсами которыми может
быть всё что можно поименовать
bull Каждый ресурс имеет свой уникальный идентификатор ndash URI
bull Взаимодействие с ресурсами происходит по средствам HTTP
(команды GET POST PUT и DELETE)
bull Ресурсы описывают себя сами
bull Content-Type Content-Length hellip
bull В ресурсах могут содержатся ссылки на другие ресурсы
Ограничения REST
bull Stateless ndash отсутствие состояния у сервера Вся информация
необходимая для обработки запроса ресурса содержится в
самом запросе
bull Idempotent ndash повторное действие над объектом не
изменяет его
bull Side Effects ndash запрашивая значение объекта по GET не должно
происходить изменение этого или другого объекта
bull HTTP only
Интернет магазин
Клиенты
Клиент 1
Клиент 2
Счет 1
Счет 2
helliphellip
Клиент N
Ресурс URI
Клиенты mysitecomClients
Клиент mysitecomClientsClient
Счет mysitecomClientsClientaccount
hellip hellip
WebGet WebInvoke
bull WebGet ndash связывает метод с HTTP GET запросом
bull WebInvoke ndash все остальные HTTP запросы (POST PUT hellip)
bull UriTemplate ndash шаблон URI для связывания метода с запросом
Практика
OData
Протокол доступа к данным
основанный на REST
архитектуре
Адресация данных
bull Обращение к коллекции объектов
bull httpServicesvcCustomers
bull Обращение к объекту по PK
bull httpServicesvcCustomers(523)
bull Обращение к полю объекта
bull httpServicesvcCustomers(523)Name
bull Обращение к коллекции объектов с сортировкой
bull httpServicesvcCustomers$orderby=Name
bull Обращение к коллекции объектов с фильтрацией
bull httpServicesvcCustomers$filter=Created gt rsquo2008-01-01rsquo
bull Постарничный доступ
bull httpServicesvcCustomers$top=10amp$skip=20
Контроль доступаbull Видимость
bull Управление видимостью на уровне контейнера
объектов
bull Опции Read Query Write
bull Аутентификация
bull Интеграция с hosting-средой
bull ASPNET WCF пользовательская аутентификация
bull Перехватчики (interceptors)
bull Выполняются перед GETPUTPOSTDELETE
bull Включают валидацию и пользовательские
политики безопасности на уровне строк данных
Перехватчики
bull QueryInterceptor
bull ChangeInterceptor
[QueryInterceptor(Orders)]public ExpressionltFuncltOrder boolgtgt OnQueryOrders()
return o =gt oCustomerContactName == HttpContextCurrentUserIdentityName
[ChangeInterceptor(Products)]public void OnChangeProducts(Product product
UpdateOperations operations) if (operations == UpdateOperationsDelete)
throw new DataServiceException(400 Products cannot be deleted)
Конкурентный доступ
bull Optimistic concurrency
bull Интеграция с существующей
HTTP инфраструктурой
GET Customers(1)
200 ETagxx
PUTCustomers(1)
If-Match xx
201 ETagxx
OR
412 ETagxx
Практика
Итогиbull Работа со связанными сущностями
bull Модификация данных (GET POST PUT MERGE
DELETE)
bull Конкурентный доступ
bull Пакетная обработка
bull Сервисные операции
bull Различные источники данных
bull Безопасность ограничение видимости
bull Перехватчики
bull Различное представление данных
bull Клиентские прокси (NET PHP Java)
Все выше сказанное честно позаимствовано тут
bull MSDN Magazine
bull Extending WCF with Custom Behaviors
(httpmsdnmicrosoftcomen-usmagazinecc163302aspx)
bull WCF Bindings In Depth (httpmsdnmicrosoftcomen-
usmagazinecc163394aspx)
bull TechDaysru
bull DotNetCurrycom
bull DevCurrycom
bull Службы WCF Data Services
bull httpmsdnmicrosoftcomru-rulibrarycc668792aspx
Спасибо за внимание
prevContactIndex++
return Contacts[prevContactIndex]
SOAP ndash это выполнение операции
SOAP
Service
POST ServiceAccessMyService1svc
Host wwwsitecom
SOAPAction GetNextContact
hellip
ltsoapEnvelope xmlnssoap= hellip
hellip
ltsoapEnvelopegt
SOAP
Client
Contact Data
return GetContact(2)
REST ndash это запрос ресурса
REST
Service
GET sitecomMyService1svcContact(2)
REST
Client
Contact Data
Принципы REST
bull Пользователь взаимодействуют с ресурсами которыми может
быть всё что можно поименовать
bull Каждый ресурс имеет свой уникальный идентификатор ndash URI
bull Взаимодействие с ресурсами происходит по средствам HTTP
(команды GET POST PUT и DELETE)
bull Ресурсы описывают себя сами
bull Content-Type Content-Length hellip
bull В ресурсах могут содержатся ссылки на другие ресурсы
Ограничения REST
bull Stateless ndash отсутствие состояния у сервера Вся информация
необходимая для обработки запроса ресурса содержится в
самом запросе
bull Idempotent ndash повторное действие над объектом не
изменяет его
bull Side Effects ndash запрашивая значение объекта по GET не должно
происходить изменение этого или другого объекта
bull HTTP only
Интернет магазин
Клиенты
Клиент 1
Клиент 2
Счет 1
Счет 2
helliphellip
Клиент N
Ресурс URI
Клиенты mysitecomClients
Клиент mysitecomClientsClient
Счет mysitecomClientsClientaccount
hellip hellip
WebGet WebInvoke
bull WebGet ndash связывает метод с HTTP GET запросом
bull WebInvoke ndash все остальные HTTP запросы (POST PUT hellip)
bull UriTemplate ndash шаблон URI для связывания метода с запросом
Практика
OData
Протокол доступа к данным
основанный на REST
архитектуре
Адресация данных
bull Обращение к коллекции объектов
bull httpServicesvcCustomers
bull Обращение к объекту по PK
bull httpServicesvcCustomers(523)
bull Обращение к полю объекта
bull httpServicesvcCustomers(523)Name
bull Обращение к коллекции объектов с сортировкой
bull httpServicesvcCustomers$orderby=Name
bull Обращение к коллекции объектов с фильтрацией
bull httpServicesvcCustomers$filter=Created gt rsquo2008-01-01rsquo
bull Постарничный доступ
bull httpServicesvcCustomers$top=10amp$skip=20
Контроль доступаbull Видимость
bull Управление видимостью на уровне контейнера
объектов
bull Опции Read Query Write
bull Аутентификация
bull Интеграция с hosting-средой
bull ASPNET WCF пользовательская аутентификация
bull Перехватчики (interceptors)
bull Выполняются перед GETPUTPOSTDELETE
bull Включают валидацию и пользовательские
политики безопасности на уровне строк данных
Перехватчики
bull QueryInterceptor
bull ChangeInterceptor
[QueryInterceptor(Orders)]public ExpressionltFuncltOrder boolgtgt OnQueryOrders()
return o =gt oCustomerContactName == HttpContextCurrentUserIdentityName
[ChangeInterceptor(Products)]public void OnChangeProducts(Product product
UpdateOperations operations) if (operations == UpdateOperationsDelete)
throw new DataServiceException(400 Products cannot be deleted)
Конкурентный доступ
bull Optimistic concurrency
bull Интеграция с существующей
HTTP инфраструктурой
GET Customers(1)
200 ETagxx
PUTCustomers(1)
If-Match xx
201 ETagxx
OR
412 ETagxx
Практика
Итогиbull Работа со связанными сущностями
bull Модификация данных (GET POST PUT MERGE
DELETE)
bull Конкурентный доступ
bull Пакетная обработка
bull Сервисные операции
bull Различные источники данных
bull Безопасность ограничение видимости
bull Перехватчики
bull Различное представление данных
bull Клиентские прокси (NET PHP Java)
Все выше сказанное честно позаимствовано тут
bull MSDN Magazine
bull Extending WCF with Custom Behaviors
(httpmsdnmicrosoftcomen-usmagazinecc163302aspx)
bull WCF Bindings In Depth (httpmsdnmicrosoftcomen-
usmagazinecc163394aspx)
bull TechDaysru
bull DotNetCurrycom
bull DevCurrycom
bull Службы WCF Data Services
bull httpmsdnmicrosoftcomru-rulibrarycc668792aspx
Спасибо за внимание
return GetContact(2)
REST ndash это запрос ресурса
REST
Service
GET sitecomMyService1svcContact(2)
REST
Client
Contact Data
Принципы REST
bull Пользователь взаимодействуют с ресурсами которыми может
быть всё что можно поименовать
bull Каждый ресурс имеет свой уникальный идентификатор ndash URI
bull Взаимодействие с ресурсами происходит по средствам HTTP
(команды GET POST PUT и DELETE)
bull Ресурсы описывают себя сами
bull Content-Type Content-Length hellip
bull В ресурсах могут содержатся ссылки на другие ресурсы
Ограничения REST
bull Stateless ndash отсутствие состояния у сервера Вся информация
необходимая для обработки запроса ресурса содержится в
самом запросе
bull Idempotent ndash повторное действие над объектом не
изменяет его
bull Side Effects ndash запрашивая значение объекта по GET не должно
происходить изменение этого или другого объекта
bull HTTP only
Интернет магазин
Клиенты
Клиент 1
Клиент 2
Счет 1
Счет 2
helliphellip
Клиент N
Ресурс URI
Клиенты mysitecomClients
Клиент mysitecomClientsClient
Счет mysitecomClientsClientaccount
hellip hellip
WebGet WebInvoke
bull WebGet ndash связывает метод с HTTP GET запросом
bull WebInvoke ndash все остальные HTTP запросы (POST PUT hellip)
bull UriTemplate ndash шаблон URI для связывания метода с запросом
Практика
OData
Протокол доступа к данным
основанный на REST
архитектуре
Адресация данных
bull Обращение к коллекции объектов
bull httpServicesvcCustomers
bull Обращение к объекту по PK
bull httpServicesvcCustomers(523)
bull Обращение к полю объекта
bull httpServicesvcCustomers(523)Name
bull Обращение к коллекции объектов с сортировкой
bull httpServicesvcCustomers$orderby=Name
bull Обращение к коллекции объектов с фильтрацией
bull httpServicesvcCustomers$filter=Created gt rsquo2008-01-01rsquo
bull Постарничный доступ
bull httpServicesvcCustomers$top=10amp$skip=20
Контроль доступаbull Видимость
bull Управление видимостью на уровне контейнера
объектов
bull Опции Read Query Write
bull Аутентификация
bull Интеграция с hosting-средой
bull ASPNET WCF пользовательская аутентификация
bull Перехватчики (interceptors)
bull Выполняются перед GETPUTPOSTDELETE
bull Включают валидацию и пользовательские
политики безопасности на уровне строк данных
Перехватчики
bull QueryInterceptor
bull ChangeInterceptor
[QueryInterceptor(Orders)]public ExpressionltFuncltOrder boolgtgt OnQueryOrders()
return o =gt oCustomerContactName == HttpContextCurrentUserIdentityName
[ChangeInterceptor(Products)]public void OnChangeProducts(Product product
UpdateOperations operations) if (operations == UpdateOperationsDelete)
throw new DataServiceException(400 Products cannot be deleted)
Конкурентный доступ
bull Optimistic concurrency
bull Интеграция с существующей
HTTP инфраструктурой
GET Customers(1)
200 ETagxx
PUTCustomers(1)
If-Match xx
201 ETagxx
OR
412 ETagxx
Практика
Итогиbull Работа со связанными сущностями
bull Модификация данных (GET POST PUT MERGE
DELETE)
bull Конкурентный доступ
bull Пакетная обработка
bull Сервисные операции
bull Различные источники данных
bull Безопасность ограничение видимости
bull Перехватчики
bull Различное представление данных
bull Клиентские прокси (NET PHP Java)
Все выше сказанное честно позаимствовано тут
bull MSDN Magazine
bull Extending WCF with Custom Behaviors
(httpmsdnmicrosoftcomen-usmagazinecc163302aspx)
bull WCF Bindings In Depth (httpmsdnmicrosoftcomen-
usmagazinecc163394aspx)
bull TechDaysru
bull DotNetCurrycom
bull DevCurrycom
bull Службы WCF Data Services
bull httpmsdnmicrosoftcomru-rulibrarycc668792aspx
Спасибо за внимание
Принципы REST
bull Пользователь взаимодействуют с ресурсами которыми может
быть всё что можно поименовать
bull Каждый ресурс имеет свой уникальный идентификатор ndash URI
bull Взаимодействие с ресурсами происходит по средствам HTTP
(команды GET POST PUT и DELETE)
bull Ресурсы описывают себя сами
bull Content-Type Content-Length hellip
bull В ресурсах могут содержатся ссылки на другие ресурсы
Ограничения REST
bull Stateless ndash отсутствие состояния у сервера Вся информация
необходимая для обработки запроса ресурса содержится в
самом запросе
bull Idempotent ndash повторное действие над объектом не
изменяет его
bull Side Effects ndash запрашивая значение объекта по GET не должно
происходить изменение этого или другого объекта
bull HTTP only
Интернет магазин
Клиенты
Клиент 1
Клиент 2
Счет 1
Счет 2
helliphellip
Клиент N
Ресурс URI
Клиенты mysitecomClients
Клиент mysitecomClientsClient
Счет mysitecomClientsClientaccount
hellip hellip
WebGet WebInvoke
bull WebGet ndash связывает метод с HTTP GET запросом
bull WebInvoke ndash все остальные HTTP запросы (POST PUT hellip)
bull UriTemplate ndash шаблон URI для связывания метода с запросом
Практика
OData
Протокол доступа к данным
основанный на REST
архитектуре
Адресация данных
bull Обращение к коллекции объектов
bull httpServicesvcCustomers
bull Обращение к объекту по PK
bull httpServicesvcCustomers(523)
bull Обращение к полю объекта
bull httpServicesvcCustomers(523)Name
bull Обращение к коллекции объектов с сортировкой
bull httpServicesvcCustomers$orderby=Name
bull Обращение к коллекции объектов с фильтрацией
bull httpServicesvcCustomers$filter=Created gt rsquo2008-01-01rsquo
bull Постарничный доступ
bull httpServicesvcCustomers$top=10amp$skip=20
Контроль доступаbull Видимость
bull Управление видимостью на уровне контейнера
объектов
bull Опции Read Query Write
bull Аутентификация
bull Интеграция с hosting-средой
bull ASPNET WCF пользовательская аутентификация
bull Перехватчики (interceptors)
bull Выполняются перед GETPUTPOSTDELETE
bull Включают валидацию и пользовательские
политики безопасности на уровне строк данных
Перехватчики
bull QueryInterceptor
bull ChangeInterceptor
[QueryInterceptor(Orders)]public ExpressionltFuncltOrder boolgtgt OnQueryOrders()
return o =gt oCustomerContactName == HttpContextCurrentUserIdentityName
[ChangeInterceptor(Products)]public void OnChangeProducts(Product product
UpdateOperations operations) if (operations == UpdateOperationsDelete)
throw new DataServiceException(400 Products cannot be deleted)
Конкурентный доступ
bull Optimistic concurrency
bull Интеграция с существующей
HTTP инфраструктурой
GET Customers(1)
200 ETagxx
PUTCustomers(1)
If-Match xx
201 ETagxx
OR
412 ETagxx
Практика
Итогиbull Работа со связанными сущностями
bull Модификация данных (GET POST PUT MERGE
DELETE)
bull Конкурентный доступ
bull Пакетная обработка
bull Сервисные операции
bull Различные источники данных
bull Безопасность ограничение видимости
bull Перехватчики
bull Различное представление данных
bull Клиентские прокси (NET PHP Java)
Все выше сказанное честно позаимствовано тут
bull MSDN Magazine
bull Extending WCF with Custom Behaviors
(httpmsdnmicrosoftcomen-usmagazinecc163302aspx)
bull WCF Bindings In Depth (httpmsdnmicrosoftcomen-
usmagazinecc163394aspx)
bull TechDaysru
bull DotNetCurrycom
bull DevCurrycom
bull Службы WCF Data Services
bull httpmsdnmicrosoftcomru-rulibrarycc668792aspx
Спасибо за внимание
Ограничения REST
bull Stateless ndash отсутствие состояния у сервера Вся информация
необходимая для обработки запроса ресурса содержится в
самом запросе
bull Idempotent ndash повторное действие над объектом не
изменяет его
bull Side Effects ndash запрашивая значение объекта по GET не должно
происходить изменение этого или другого объекта
bull HTTP only
Интернет магазин
Клиенты
Клиент 1
Клиент 2
Счет 1
Счет 2
helliphellip
Клиент N
Ресурс URI
Клиенты mysitecomClients
Клиент mysitecomClientsClient
Счет mysitecomClientsClientaccount
hellip hellip
WebGet WebInvoke
bull WebGet ndash связывает метод с HTTP GET запросом
bull WebInvoke ndash все остальные HTTP запросы (POST PUT hellip)
bull UriTemplate ndash шаблон URI для связывания метода с запросом
Практика
OData
Протокол доступа к данным
основанный на REST
архитектуре
Адресация данных
bull Обращение к коллекции объектов
bull httpServicesvcCustomers
bull Обращение к объекту по PK
bull httpServicesvcCustomers(523)
bull Обращение к полю объекта
bull httpServicesvcCustomers(523)Name
bull Обращение к коллекции объектов с сортировкой
bull httpServicesvcCustomers$orderby=Name
bull Обращение к коллекции объектов с фильтрацией
bull httpServicesvcCustomers$filter=Created gt rsquo2008-01-01rsquo
bull Постарничный доступ
bull httpServicesvcCustomers$top=10amp$skip=20
Контроль доступаbull Видимость
bull Управление видимостью на уровне контейнера
объектов
bull Опции Read Query Write
bull Аутентификация
bull Интеграция с hosting-средой
bull ASPNET WCF пользовательская аутентификация
bull Перехватчики (interceptors)
bull Выполняются перед GETPUTPOSTDELETE
bull Включают валидацию и пользовательские
политики безопасности на уровне строк данных
Перехватчики
bull QueryInterceptor
bull ChangeInterceptor
[QueryInterceptor(Orders)]public ExpressionltFuncltOrder boolgtgt OnQueryOrders()
return o =gt oCustomerContactName == HttpContextCurrentUserIdentityName
[ChangeInterceptor(Products)]public void OnChangeProducts(Product product
UpdateOperations operations) if (operations == UpdateOperationsDelete)
throw new DataServiceException(400 Products cannot be deleted)
Конкурентный доступ
bull Optimistic concurrency
bull Интеграция с существующей
HTTP инфраструктурой
GET Customers(1)
200 ETagxx
PUTCustomers(1)
If-Match xx
201 ETagxx
OR
412 ETagxx
Практика
Итогиbull Работа со связанными сущностями
bull Модификация данных (GET POST PUT MERGE
DELETE)
bull Конкурентный доступ
bull Пакетная обработка
bull Сервисные операции
bull Различные источники данных
bull Безопасность ограничение видимости
bull Перехватчики
bull Различное представление данных
bull Клиентские прокси (NET PHP Java)
Все выше сказанное честно позаимствовано тут
bull MSDN Magazine
bull Extending WCF with Custom Behaviors
(httpmsdnmicrosoftcomen-usmagazinecc163302aspx)
bull WCF Bindings In Depth (httpmsdnmicrosoftcomen-
usmagazinecc163394aspx)
bull TechDaysru
bull DotNetCurrycom
bull DevCurrycom
bull Службы WCF Data Services
bull httpmsdnmicrosoftcomru-rulibrarycc668792aspx
Спасибо за внимание
Интернет магазин
Клиенты
Клиент 1
Клиент 2
Счет 1
Счет 2
helliphellip
Клиент N
Ресурс URI
Клиенты mysitecomClients
Клиент mysitecomClientsClient
Счет mysitecomClientsClientaccount
hellip hellip
WebGet WebInvoke
bull WebGet ndash связывает метод с HTTP GET запросом
bull WebInvoke ndash все остальные HTTP запросы (POST PUT hellip)
bull UriTemplate ndash шаблон URI для связывания метода с запросом
Практика
OData
Протокол доступа к данным
основанный на REST
архитектуре
Адресация данных
bull Обращение к коллекции объектов
bull httpServicesvcCustomers
bull Обращение к объекту по PK
bull httpServicesvcCustomers(523)
bull Обращение к полю объекта
bull httpServicesvcCustomers(523)Name
bull Обращение к коллекции объектов с сортировкой
bull httpServicesvcCustomers$orderby=Name
bull Обращение к коллекции объектов с фильтрацией
bull httpServicesvcCustomers$filter=Created gt rsquo2008-01-01rsquo
bull Постарничный доступ
bull httpServicesvcCustomers$top=10amp$skip=20
Контроль доступаbull Видимость
bull Управление видимостью на уровне контейнера
объектов
bull Опции Read Query Write
bull Аутентификация
bull Интеграция с hosting-средой
bull ASPNET WCF пользовательская аутентификация
bull Перехватчики (interceptors)
bull Выполняются перед GETPUTPOSTDELETE
bull Включают валидацию и пользовательские
политики безопасности на уровне строк данных
Перехватчики
bull QueryInterceptor
bull ChangeInterceptor
[QueryInterceptor(Orders)]public ExpressionltFuncltOrder boolgtgt OnQueryOrders()
return o =gt oCustomerContactName == HttpContextCurrentUserIdentityName
[ChangeInterceptor(Products)]public void OnChangeProducts(Product product
UpdateOperations operations) if (operations == UpdateOperationsDelete)
throw new DataServiceException(400 Products cannot be deleted)
Конкурентный доступ
bull Optimistic concurrency
bull Интеграция с существующей
HTTP инфраструктурой
GET Customers(1)
200 ETagxx
PUTCustomers(1)
If-Match xx
201 ETagxx
OR
412 ETagxx
Практика
Итогиbull Работа со связанными сущностями
bull Модификация данных (GET POST PUT MERGE
DELETE)
bull Конкурентный доступ
bull Пакетная обработка
bull Сервисные операции
bull Различные источники данных
bull Безопасность ограничение видимости
bull Перехватчики
bull Различное представление данных
bull Клиентские прокси (NET PHP Java)
Все выше сказанное честно позаимствовано тут
bull MSDN Magazine
bull Extending WCF with Custom Behaviors
(httpmsdnmicrosoftcomen-usmagazinecc163302aspx)
bull WCF Bindings In Depth (httpmsdnmicrosoftcomen-
usmagazinecc163394aspx)
bull TechDaysru
bull DotNetCurrycom
bull DevCurrycom
bull Службы WCF Data Services
bull httpmsdnmicrosoftcomru-rulibrarycc668792aspx
Спасибо за внимание
WebGet WebInvoke
bull WebGet ndash связывает метод с HTTP GET запросом
bull WebInvoke ndash все остальные HTTP запросы (POST PUT hellip)
bull UriTemplate ndash шаблон URI для связывания метода с запросом
Практика
OData
Протокол доступа к данным
основанный на REST
архитектуре
Адресация данных
bull Обращение к коллекции объектов
bull httpServicesvcCustomers
bull Обращение к объекту по PK
bull httpServicesvcCustomers(523)
bull Обращение к полю объекта
bull httpServicesvcCustomers(523)Name
bull Обращение к коллекции объектов с сортировкой
bull httpServicesvcCustomers$orderby=Name
bull Обращение к коллекции объектов с фильтрацией
bull httpServicesvcCustomers$filter=Created gt rsquo2008-01-01rsquo
bull Постарничный доступ
bull httpServicesvcCustomers$top=10amp$skip=20
Контроль доступаbull Видимость
bull Управление видимостью на уровне контейнера
объектов
bull Опции Read Query Write
bull Аутентификация
bull Интеграция с hosting-средой
bull ASPNET WCF пользовательская аутентификация
bull Перехватчики (interceptors)
bull Выполняются перед GETPUTPOSTDELETE
bull Включают валидацию и пользовательские
политики безопасности на уровне строк данных
Перехватчики
bull QueryInterceptor
bull ChangeInterceptor
[QueryInterceptor(Orders)]public ExpressionltFuncltOrder boolgtgt OnQueryOrders()
return o =gt oCustomerContactName == HttpContextCurrentUserIdentityName
[ChangeInterceptor(Products)]public void OnChangeProducts(Product product
UpdateOperations operations) if (operations == UpdateOperationsDelete)
throw new DataServiceException(400 Products cannot be deleted)
Конкурентный доступ
bull Optimistic concurrency
bull Интеграция с существующей
HTTP инфраструктурой
GET Customers(1)
200 ETagxx
PUTCustomers(1)
If-Match xx
201 ETagxx
OR
412 ETagxx
Практика
Итогиbull Работа со связанными сущностями
bull Модификация данных (GET POST PUT MERGE
DELETE)
bull Конкурентный доступ
bull Пакетная обработка
bull Сервисные операции
bull Различные источники данных
bull Безопасность ограничение видимости
bull Перехватчики
bull Различное представление данных
bull Клиентские прокси (NET PHP Java)
Все выше сказанное честно позаимствовано тут
bull MSDN Magazine
bull Extending WCF with Custom Behaviors
(httpmsdnmicrosoftcomen-usmagazinecc163302aspx)
bull WCF Bindings In Depth (httpmsdnmicrosoftcomen-
usmagazinecc163394aspx)
bull TechDaysru
bull DotNetCurrycom
bull DevCurrycom
bull Службы WCF Data Services
bull httpmsdnmicrosoftcomru-rulibrarycc668792aspx
Спасибо за внимание
Практика
OData
Протокол доступа к данным
основанный на REST
архитектуре
Адресация данных
bull Обращение к коллекции объектов
bull httpServicesvcCustomers
bull Обращение к объекту по PK
bull httpServicesvcCustomers(523)
bull Обращение к полю объекта
bull httpServicesvcCustomers(523)Name
bull Обращение к коллекции объектов с сортировкой
bull httpServicesvcCustomers$orderby=Name
bull Обращение к коллекции объектов с фильтрацией
bull httpServicesvcCustomers$filter=Created gt rsquo2008-01-01rsquo
bull Постарничный доступ
bull httpServicesvcCustomers$top=10amp$skip=20
Контроль доступаbull Видимость
bull Управление видимостью на уровне контейнера
объектов
bull Опции Read Query Write
bull Аутентификация
bull Интеграция с hosting-средой
bull ASPNET WCF пользовательская аутентификация
bull Перехватчики (interceptors)
bull Выполняются перед GETPUTPOSTDELETE
bull Включают валидацию и пользовательские
политики безопасности на уровне строк данных
Перехватчики
bull QueryInterceptor
bull ChangeInterceptor
[QueryInterceptor(Orders)]public ExpressionltFuncltOrder boolgtgt OnQueryOrders()
return o =gt oCustomerContactName == HttpContextCurrentUserIdentityName
[ChangeInterceptor(Products)]public void OnChangeProducts(Product product
UpdateOperations operations) if (operations == UpdateOperationsDelete)
throw new DataServiceException(400 Products cannot be deleted)
Конкурентный доступ
bull Optimistic concurrency
bull Интеграция с существующей
HTTP инфраструктурой
GET Customers(1)
200 ETagxx
PUTCustomers(1)
If-Match xx
201 ETagxx
OR
412 ETagxx
Практика
Итогиbull Работа со связанными сущностями
bull Модификация данных (GET POST PUT MERGE
DELETE)
bull Конкурентный доступ
bull Пакетная обработка
bull Сервисные операции
bull Различные источники данных
bull Безопасность ограничение видимости
bull Перехватчики
bull Различное представление данных
bull Клиентские прокси (NET PHP Java)
Все выше сказанное честно позаимствовано тут
bull MSDN Magazine
bull Extending WCF with Custom Behaviors
(httpmsdnmicrosoftcomen-usmagazinecc163302aspx)
bull WCF Bindings In Depth (httpmsdnmicrosoftcomen-
usmagazinecc163394aspx)
bull TechDaysru
bull DotNetCurrycom
bull DevCurrycom
bull Службы WCF Data Services
bull httpmsdnmicrosoftcomru-rulibrarycc668792aspx
Спасибо за внимание
OData
Протокол доступа к данным
основанный на REST
архитектуре
Адресация данных
bull Обращение к коллекции объектов
bull httpServicesvcCustomers
bull Обращение к объекту по PK
bull httpServicesvcCustomers(523)
bull Обращение к полю объекта
bull httpServicesvcCustomers(523)Name
bull Обращение к коллекции объектов с сортировкой
bull httpServicesvcCustomers$orderby=Name
bull Обращение к коллекции объектов с фильтрацией
bull httpServicesvcCustomers$filter=Created gt rsquo2008-01-01rsquo
bull Постарничный доступ
bull httpServicesvcCustomers$top=10amp$skip=20
Контроль доступаbull Видимость
bull Управление видимостью на уровне контейнера
объектов
bull Опции Read Query Write
bull Аутентификация
bull Интеграция с hosting-средой
bull ASPNET WCF пользовательская аутентификация
bull Перехватчики (interceptors)
bull Выполняются перед GETPUTPOSTDELETE
bull Включают валидацию и пользовательские
политики безопасности на уровне строк данных
Перехватчики
bull QueryInterceptor
bull ChangeInterceptor
[QueryInterceptor(Orders)]public ExpressionltFuncltOrder boolgtgt OnQueryOrders()
return o =gt oCustomerContactName == HttpContextCurrentUserIdentityName
[ChangeInterceptor(Products)]public void OnChangeProducts(Product product
UpdateOperations operations) if (operations == UpdateOperationsDelete)
throw new DataServiceException(400 Products cannot be deleted)
Конкурентный доступ
bull Optimistic concurrency
bull Интеграция с существующей
HTTP инфраструктурой
GET Customers(1)
200 ETagxx
PUTCustomers(1)
If-Match xx
201 ETagxx
OR
412 ETagxx
Практика
Итогиbull Работа со связанными сущностями
bull Модификация данных (GET POST PUT MERGE
DELETE)
bull Конкурентный доступ
bull Пакетная обработка
bull Сервисные операции
bull Различные источники данных
bull Безопасность ограничение видимости
bull Перехватчики
bull Различное представление данных
bull Клиентские прокси (NET PHP Java)
Все выше сказанное честно позаимствовано тут
bull MSDN Magazine
bull Extending WCF with Custom Behaviors
(httpmsdnmicrosoftcomen-usmagazinecc163302aspx)
bull WCF Bindings In Depth (httpmsdnmicrosoftcomen-
usmagazinecc163394aspx)
bull TechDaysru
bull DotNetCurrycom
bull DevCurrycom
bull Службы WCF Data Services
bull httpmsdnmicrosoftcomru-rulibrarycc668792aspx
Спасибо за внимание
Адресация данных
bull Обращение к коллекции объектов
bull httpServicesvcCustomers
bull Обращение к объекту по PK
bull httpServicesvcCustomers(523)
bull Обращение к полю объекта
bull httpServicesvcCustomers(523)Name
bull Обращение к коллекции объектов с сортировкой
bull httpServicesvcCustomers$orderby=Name
bull Обращение к коллекции объектов с фильтрацией
bull httpServicesvcCustomers$filter=Created gt rsquo2008-01-01rsquo
bull Постарничный доступ
bull httpServicesvcCustomers$top=10amp$skip=20
Контроль доступаbull Видимость
bull Управление видимостью на уровне контейнера
объектов
bull Опции Read Query Write
bull Аутентификация
bull Интеграция с hosting-средой
bull ASPNET WCF пользовательская аутентификация
bull Перехватчики (interceptors)
bull Выполняются перед GETPUTPOSTDELETE
bull Включают валидацию и пользовательские
политики безопасности на уровне строк данных
Перехватчики
bull QueryInterceptor
bull ChangeInterceptor
[QueryInterceptor(Orders)]public ExpressionltFuncltOrder boolgtgt OnQueryOrders()
return o =gt oCustomerContactName == HttpContextCurrentUserIdentityName
[ChangeInterceptor(Products)]public void OnChangeProducts(Product product
UpdateOperations operations) if (operations == UpdateOperationsDelete)
throw new DataServiceException(400 Products cannot be deleted)
Конкурентный доступ
bull Optimistic concurrency
bull Интеграция с существующей
HTTP инфраструктурой
GET Customers(1)
200 ETagxx
PUTCustomers(1)
If-Match xx
201 ETagxx
OR
412 ETagxx
Практика
Итогиbull Работа со связанными сущностями
bull Модификация данных (GET POST PUT MERGE
DELETE)
bull Конкурентный доступ
bull Пакетная обработка
bull Сервисные операции
bull Различные источники данных
bull Безопасность ограничение видимости
bull Перехватчики
bull Различное представление данных
bull Клиентские прокси (NET PHP Java)
Все выше сказанное честно позаимствовано тут
bull MSDN Magazine
bull Extending WCF with Custom Behaviors
(httpmsdnmicrosoftcomen-usmagazinecc163302aspx)
bull WCF Bindings In Depth (httpmsdnmicrosoftcomen-
usmagazinecc163394aspx)
bull TechDaysru
bull DotNetCurrycom
bull DevCurrycom
bull Службы WCF Data Services
bull httpmsdnmicrosoftcomru-rulibrarycc668792aspx
Спасибо за внимание
Контроль доступаbull Видимость
bull Управление видимостью на уровне контейнера
объектов
bull Опции Read Query Write
bull Аутентификация
bull Интеграция с hosting-средой
bull ASPNET WCF пользовательская аутентификация
bull Перехватчики (interceptors)
bull Выполняются перед GETPUTPOSTDELETE
bull Включают валидацию и пользовательские
политики безопасности на уровне строк данных
Перехватчики
bull QueryInterceptor
bull ChangeInterceptor
[QueryInterceptor(Orders)]public ExpressionltFuncltOrder boolgtgt OnQueryOrders()
return o =gt oCustomerContactName == HttpContextCurrentUserIdentityName
[ChangeInterceptor(Products)]public void OnChangeProducts(Product product
UpdateOperations operations) if (operations == UpdateOperationsDelete)
throw new DataServiceException(400 Products cannot be deleted)
Конкурентный доступ
bull Optimistic concurrency
bull Интеграция с существующей
HTTP инфраструктурой
GET Customers(1)
200 ETagxx
PUTCustomers(1)
If-Match xx
201 ETagxx
OR
412 ETagxx
Практика
Итогиbull Работа со связанными сущностями
bull Модификация данных (GET POST PUT MERGE
DELETE)
bull Конкурентный доступ
bull Пакетная обработка
bull Сервисные операции
bull Различные источники данных
bull Безопасность ограничение видимости
bull Перехватчики
bull Различное представление данных
bull Клиентские прокси (NET PHP Java)
Все выше сказанное честно позаимствовано тут
bull MSDN Magazine
bull Extending WCF with Custom Behaviors
(httpmsdnmicrosoftcomen-usmagazinecc163302aspx)
bull WCF Bindings In Depth (httpmsdnmicrosoftcomen-
usmagazinecc163394aspx)
bull TechDaysru
bull DotNetCurrycom
bull DevCurrycom
bull Службы WCF Data Services
bull httpmsdnmicrosoftcomru-rulibrarycc668792aspx
Спасибо за внимание
Перехватчики
bull QueryInterceptor
bull ChangeInterceptor
[QueryInterceptor(Orders)]public ExpressionltFuncltOrder boolgtgt OnQueryOrders()
return o =gt oCustomerContactName == HttpContextCurrentUserIdentityName
[ChangeInterceptor(Products)]public void OnChangeProducts(Product product
UpdateOperations operations) if (operations == UpdateOperationsDelete)
throw new DataServiceException(400 Products cannot be deleted)
Конкурентный доступ
bull Optimistic concurrency
bull Интеграция с существующей
HTTP инфраструктурой
GET Customers(1)
200 ETagxx
PUTCustomers(1)
If-Match xx
201 ETagxx
OR
412 ETagxx
Практика
Итогиbull Работа со связанными сущностями
bull Модификация данных (GET POST PUT MERGE
DELETE)
bull Конкурентный доступ
bull Пакетная обработка
bull Сервисные операции
bull Различные источники данных
bull Безопасность ограничение видимости
bull Перехватчики
bull Различное представление данных
bull Клиентские прокси (NET PHP Java)
Все выше сказанное честно позаимствовано тут
bull MSDN Magazine
bull Extending WCF with Custom Behaviors
(httpmsdnmicrosoftcomen-usmagazinecc163302aspx)
bull WCF Bindings In Depth (httpmsdnmicrosoftcomen-
usmagazinecc163394aspx)
bull TechDaysru
bull DotNetCurrycom
bull DevCurrycom
bull Службы WCF Data Services
bull httpmsdnmicrosoftcomru-rulibrarycc668792aspx
Спасибо за внимание
Конкурентный доступ
bull Optimistic concurrency
bull Интеграция с существующей
HTTP инфраструктурой
GET Customers(1)
200 ETagxx
PUTCustomers(1)
If-Match xx
201 ETagxx
OR
412 ETagxx
Практика
Итогиbull Работа со связанными сущностями
bull Модификация данных (GET POST PUT MERGE
DELETE)
bull Конкурентный доступ
bull Пакетная обработка
bull Сервисные операции
bull Различные источники данных
bull Безопасность ограничение видимости
bull Перехватчики
bull Различное представление данных
bull Клиентские прокси (NET PHP Java)
Все выше сказанное честно позаимствовано тут
bull MSDN Magazine
bull Extending WCF with Custom Behaviors
(httpmsdnmicrosoftcomen-usmagazinecc163302aspx)
bull WCF Bindings In Depth (httpmsdnmicrosoftcomen-
usmagazinecc163394aspx)
bull TechDaysru
bull DotNetCurrycom
bull DevCurrycom
bull Службы WCF Data Services
bull httpmsdnmicrosoftcomru-rulibrarycc668792aspx
Спасибо за внимание
Практика
Итогиbull Работа со связанными сущностями
bull Модификация данных (GET POST PUT MERGE
DELETE)
bull Конкурентный доступ
bull Пакетная обработка
bull Сервисные операции
bull Различные источники данных
bull Безопасность ограничение видимости
bull Перехватчики
bull Различное представление данных
bull Клиентские прокси (NET PHP Java)
Все выше сказанное честно позаимствовано тут
bull MSDN Magazine
bull Extending WCF with Custom Behaviors
(httpmsdnmicrosoftcomen-usmagazinecc163302aspx)
bull WCF Bindings In Depth (httpmsdnmicrosoftcomen-
usmagazinecc163394aspx)
bull TechDaysru
bull DotNetCurrycom
bull DevCurrycom
bull Службы WCF Data Services
bull httpmsdnmicrosoftcomru-rulibrarycc668792aspx
Спасибо за внимание
Итогиbull Работа со связанными сущностями
bull Модификация данных (GET POST PUT MERGE
DELETE)
bull Конкурентный доступ
bull Пакетная обработка
bull Сервисные операции
bull Различные источники данных
bull Безопасность ограничение видимости
bull Перехватчики
bull Различное представление данных
bull Клиентские прокси (NET PHP Java)
Все выше сказанное честно позаимствовано тут
bull MSDN Magazine
bull Extending WCF with Custom Behaviors
(httpmsdnmicrosoftcomen-usmagazinecc163302aspx)
bull WCF Bindings In Depth (httpmsdnmicrosoftcomen-
usmagazinecc163394aspx)
bull TechDaysru
bull DotNetCurrycom
bull DevCurrycom
bull Службы WCF Data Services
bull httpmsdnmicrosoftcomru-rulibrarycc668792aspx
Спасибо за внимание
Все выше сказанное честно позаимствовано тут
bull MSDN Magazine
bull Extending WCF with Custom Behaviors
(httpmsdnmicrosoftcomen-usmagazinecc163302aspx)
bull WCF Bindings In Depth (httpmsdnmicrosoftcomen-
usmagazinecc163394aspx)
bull TechDaysru
bull DotNetCurrycom
bull DevCurrycom
bull Службы WCF Data Services
bull httpmsdnmicrosoftcomru-rulibrarycc668792aspx
Спасибо за внимание