Wcf Part 2

Preview:

Citation preview

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

Спасибо за внимание