54
Windows Communication Foundation Part 2

Wcf Part 2

Embed Size (px)

Citation preview

Page 1: Wcf Part 2

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

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

Page 2: Wcf 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

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

Page 3: Wcf Part 2

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

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

Page 4: Wcf Part 2

Поведение (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

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

Page 5: Wcf Part 2

Выполнение (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

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

Page 6: Wcf Part 2

Типы контрактов Контракт

(Что)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

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

Page 7: Wcf Part 2

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

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

Page 8: Wcf Part 2

Поведение

Поведение предназначено для модификации и

расширения функциональности сервиса или клиента

Поведение

(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

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

Page 9: Wcf Part 2

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

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

Page 10: Wcf Part 2

Практика

Итоги

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

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

Page 11: Wcf Part 2

Итоги

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

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

Page 12: Wcf Part 2

Безопасность

Безопасность

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

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

Page 13: Wcf Part 2

Безопасность

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

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

Page 14: Wcf Part 2

Режимы безопасности

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

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

Page 15: Wcf Part 2

Шифрование транспортаПроизводительность

Аппаратное шифрование

Потоковая передача данных

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

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

Page 16: Wcf Part 2

Безопасность и привязки

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

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

Page 17: Wcf Part 2

Практика

Сценарий Публичный 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

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

Page 18: Wcf Part 2

Сценарий Публичный 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

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

Page 19: Wcf Part 2

Сценарий 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

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

Page 20: Wcf Part 2

Сценарий Корпоративный 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

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

Page 21: Wcf Part 2

Итоги

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

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

Page 22: Wcf Part 2

Расширяемость 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

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

Page 23: Wcf Part 2

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

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

Page 24: Wcf Part 2

Расширяемость прокси-клиента

Метод 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

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

Page 25: Wcf Part 2

Расширяемость диспетчера

Операция 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

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

Page 26: Wcf Part 2

Интерфейсы расширений

Этап Интерфейс перехватчика Описание

Проверка

параметров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

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

Page 27: Wcf Part 2

Интерфейсы расширений

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

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

Page 28: Wcf Part 2

Поведение

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

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

Page 29: Wcf Part 2

Уровни влияния поведений

Контекст Интерфейс Влияние

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

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

Page 30: Wcf Part 2

Практика

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

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

Page 31: Wcf Part 2

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

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

Page 32: Wcf Part 2

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

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

Page 33: Wcf Part 2

Обнаружение 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

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

Page 34: Wcf Part 2

Сервис

Оповещение 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

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

Page 35: Wcf Part 2

Сделаем сервис обнажаемым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

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

Page 36: Wcf Part 2

Давайте найдем сервис

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

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

Page 37: Wcf Part 2

Практика

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

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

Page 38: Wcf Part 2

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

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

Page 39: Wcf Part 2

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

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

Page 40: Wcf Part 2

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

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

Page 41: Wcf Part 2

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

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

Page 42: Wcf Part 2

Принципы 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

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

Page 43: Wcf Part 2

Ограничения 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

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

Page 44: Wcf Part 2

Интернет магазин

Клиенты

Клиент 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

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

Page 45: Wcf Part 2

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

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

Page 46: Wcf Part 2

Практика

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

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

Page 47: Wcf Part 2

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

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

Page 48: Wcf Part 2

Адресация данных

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

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

Page 49: Wcf Part 2

Контроль доступа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

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

Page 50: Wcf Part 2

Перехватчики

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

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

Page 51: Wcf Part 2

Конкурентный доступ

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

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

Page 52: Wcf Part 2

Практика

Итоги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

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

Page 53: Wcf Part 2

Итоги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

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

Page 54: Wcf Part 2

Все выше сказанное честно позаимствовано тут

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

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