Wcf Part 2

50 %
50 %
Information about Wcf Part 2
Education
abc

Published on March 12, 2014

Author: venzhyk

Source: slideshare.net

Description

Что такое WCF?
Управление безопасностью WCF сервисов
Расширяемость WCF сервисов
WCF 4.0 What’s new?
Ссылка на примеры кода: https://www.dropbox.com/s/9anx0ptow2q96zz/HelloWCF.part2.zip

Windows Communication Foundation Part 2

Что такое WCF?

Address Binding Contract (ABC) Клиент Сервис СообщениеABC A B C Адрес (Где) Привязки (Как) Контракт (Что) Конечная точка (Endpoint)

Поведение (Behavior) Клиент Сервис СообщениеABC A B CBv Bv

Выполнение (Hosting) Клиент Сервис СообщениеABC A B C A B C Metadata Bv Bv Bv Bv Proxy ServiceHost<T>() Hosting Environments WAS IIS .exe Windows Service DllHost

Типы контрактов Контракт (Что)• Описывает операции, выполняемые сервисом • CLR тип соответствует WSDL Service • Структура данных • CLR тип соответствует XSDData • Структура сообщений • CLR тип соответствует SOAP сообщению Message

Binding(Как?) Address (Где?) Contract (Что?) Привязки Просторы интернета Привязки (Как)

Поведение Поведение предназначено для модификации и расширения функциональности сервиса или клиента Поведение (Behavior) [ServiceBehavior( InstanceContextMode = InstanceContextMode.Single, IncludeExceptionDetailInFaults = true)] public class Service : IService { [OperationBehavior( ReleaseInstanceMode = ReleaseInstanceMode.AfterCall)] public DateTime GetCurrentDate() { return DateTime.Now; }

SingleMultiplePerSessionSingle Instancing & Concurrency Service InstanceContextMode ConcurrencyMode PerSession PerCall Single Single Reentrant Multiple Поведение (Behavior)

Практика

Итоги • WCF обобщает все предыдущие технологии меж процессорного взаимодействия • Транспорт: HTTP, TCP, NamedPipes, MSMQ, Custom • Кодировка: Text, Binary, MTOM, Custom • Поддерживаются сессии, гарантия доставки, шифрование, транзакции, …., Custom • Взаимодействие с сервером прозрачно для клиента • Контракт говорит – Что • Привязка говорит – Как • Адрес говорит – Где • Поведение молча манипулирует сервисом 

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

Безопасность • Конфиденциальность (confidentiality) • Целостность (integrity) • Безопасность: o на уровне сообщения o на уровне транспорта • Аутентификация: o Username o Сертификаты o Windows o SAML токены

Режимы безопасности • отсутствует (None) • на уровне сообщения (Message) • на транспортном уровне (Transport) • смешанный (TransportWithMessageCredential) • двухуровневый (Both) • TransportCredentialOnly (basicHttpBinding only) клиент сервис клиент сервис0523422E8A8 клиент сервис

Шифрование транспорта Производительность Аппаратное шифрование Потоковая передача данных Point-to-point безопасность клиент сервис1 сервис2 Шифрование сообщение End-to-end безопасность Независимость от транспортного уровня Частичное шифрование или подпись сообщения ProtectionLevel атрибут [None | Sign | EncryptAndSign] Более ресурсоемко чем шифрование транспорта клиент сервис1 сервис20523422E8A8 0523422E8A8

Безопасность и привязки Binding None Transport Message Mixed Both basicHttpBinding + + + + netTCPBinding + + + + netPeerTCPBinding + + + + netNamedPipeBinding + + wsHttpBinding + + + + wsFederationHttpBinding + + wsDualHttpBinding + + netMsmqBinding + + + + - доступно - по умолчанию++

Практика

Сценарий: Публичный WCF-сервис userNamePasswordValidationMode [Windows | Custom | Membership] Username Windows X509 сертификат SSL сертификат

Сценарий: B-2-B WCF-сервис заявки X509 сертификат X509 сертификат STS

Сценарий: Корпоративный WCF-сервис • Бинарное сжатие • Имперсонация/делегирование • Шифрование билетом Kerberos Windows Windows контроллер домена

Итоги • Безопасность по умолчанию включена • Безопасность на уровне транспорта и SOAP сообщения • Интероперабельность • WS-Security • SAML токены • Поддержка большинства стандартных сценариев • Расширяемость и гибкость

Расширяемость WCF

WCF Клиент Сервис Proxy Dispatcher Contract Channel stack Transactions Reliability Security Encoder Transport Channel stack Transactions Reliability Security Encoder Transport Address Binding

Расширяемость прокси-клиента Метод 1 Метод 2 ClientOperation ClientOperation ClientRuntime … Encoder Transport ОбъектыОбъекты Сообщение 1 2 3 Проверка параметров 1 Формирование сообщения (сериализация) 2 Проверка сообщения 3 Channel stack

Расширяемость диспетчера Операция 1 Операция 2 DispatchOperation DispatchOperation DispatchRuntime … Encoder Transport 5 3 2 Channel stack 1 4 1 Проверка сообщения 2 Выбор операции Формирование объекта (десериализация) 3 4 Вызов операции 5 Проверка параметров ОбъектыОбъекты Сообщение

Интерфейсы расширений Этап Интерфейс перехватчика Описание Проверка параметров IParameterInspector Используется до и после вызова для проверки и изменения значений параметров Форматирование сообщений IDispatchMessageFormatter IClientFormatter Используется для сериализации и десериализации Проверка сообщений IDispatchMessageInspector IClientMessageInspector Используется до отправки и после получения для проверки и замены содержимого сообщений Выбор операций IDispatchOperationSelector IClientOperationSelector Используется для выбора вызываемой операции для определенного сообщения Вызов операции IOperationInvoker Используется для вызова операции Клиент Сервис Клиент Сервис Клиент Сервис Клиент Сервис Сервис

Интерфейсы расширений • IInstanceProvider  GetInstance(InstanceContext);  ReleaseInstance(InstanceContext, Instance); • IErrorHandler • HandleError(Exception) : bool • ProvideFault(Exception, MessageVersion, ref Message)

Поведение • Это особый тип класса, расширяющий поведение серверной или клиентской среды выполнения • Поведения применяются к классам ServiceHost на сервере и ChannelFactory на клиенте • 4 типа пользовательских поведений:  Сервис (IServiceBehavior)  Конечная точка (IEndpointBehavior)  Контракт (IContractBehavior)  Операция (IOperationBehavior) • IBehavior • Validate • AddBindingParameters • ApplyDispatchBehavior • ApplyClientBehavior

Уровни влияния поведений Контекст Интерфейс Влияние Service Endpoint Contract Operation Service IServiceBehavior ✗ ✗ ✗ ✗ Endpoint IEndpointBehavior ✗ ✗ ✗ Contract IContractBehavior ✗ ✗ Operation IOperationBehavior ✗

Практика

WCF 4.0 What’s new?

WCF 4.0 • WCF • Activation Service • Routing Service • WS-Discovery • Standard Endpoints • HTTP Decompression on Client (Gzip) • WCF REST • Caching • Auto select format

Обнаружение WCF Клиент СервисСервис Discovery Request Discovery Endpoint Discovery Response СервисСервис Discovery Endpoint Discovery Response Discovery Request Discovery Endpoint Discovery Response

Сервис Оповещение ON/OFF Announcements Endpoint Сервис Hello/Bye СервисСервис Hello/Bye Discovery Endpoint Клиент

Сделаем сервис обнажаемым • Программная реализация: • Либо в конфиге: <services> <service name = "MyService"> <endpoint kind="udpDiscoveryEndpoint" /> </service> </services> <behaviors> <serviceBehaviors> <behavior> <serviceDiscovery/> </behavior> </serviceBehaviors> </behaviors> ServiceHost host = new ServiceHost(...); host.AddServiceEndpoint(new UdpDiscoveryEndpoint()); var discovery = new ServiceDiscoveryBehavior(); host.Description.Behaviors.Add(discovery); host.Open(); kind • UdpDiscoveryEndpoint • UpdAnnouncementEndpoint • DynamicEndpoint

Давайте найдем сервис var discoveryClient = new DiscoveryClient(new UdpDiscoveryEndpoint()); FindCriteria criteria = new FindCriteria(typeof(IMyContract)); criteria.MaxResults = 1; FindResponse discovered = discoveryClient.Find(criteria); discoveryClient.Close(); EndpointAddress address = discovered.Endpoints[0].Address; Binding binding = new NetTcpBinding(); var factory = new ChannelFactory<IMyContract>(binding, address); IMyContract proxy = factory.CreateChannel() proxy.MyMethod(); ((ICommunicationObject)proxy).Close();

Практика

Publish-Subscribe Pattern Publisher Pub/Sub Service Publish Announcements Endpoint Discovery Endpoint Subscriber Hello/Bye Subscriber Discover Pub/Sub Discovery Endpoint Discover Subscribers

SOAP vs REST

prevContactIndex++; return Contacts[prevContactIndex]; SOAP – это выполнение операции SOAP Service POST /ServiceAccess/MyService1.svc Host: www.site.com SOAPAction: GetNextContact … <soap:Envelope xmlns:soap= … … </soap:Envelope> SOAP Client Contact Data

return GetContact(2); REST – это запрос ресурса REST Service GET site.com/MyService1.svc/Contact(2) REST Client Contact Data

Принципы REST • Пользователь взаимодействуют с ресурсами, которыми может быть всѐ, что можно поименовать • Каждый ресурс имеет свой уникальный идентификатор – URI • Взаимодействие с ресурсами происходит по средствам HTTP (команды GET, POST, PUT и DELETE) • Ресурсы описывают себя сами • Content-Type, Content-Length, … • В ресурсах могут содержатся ссылки на другие ресурсы

Ограничения REST • Stateless – отсутствие состояния у сервера. Вся информация, необходимая для обработки запроса ресурса, содержится в самом запросе • Idempotent – повторное действие над объектом не изменяет его • Side Effects – запрашивая значение объекта по GET не должно происходить изменение этого или другого объекта • HTTP only

Интернет магазин Клиенты Клиент 1 Клиент 2 Счет 1 Счет 2 …… Клиент N Ресурс URI Клиенты mysite.com/Clients/ Клиент mysite.com/Clients/{Client} Счет mysite.com/Clients/{Client}/{account} …. …..

WebGet WebInvoke • WebGet – связывает метод с HTTP GET запросом • WebInvoke – все остальные HTTP запросы (POST, PUT, …) • UriTemplate – шаблон URI для связывания метода с запросом

Практика

OData Протокол доступа к данным основанный на REST архитектуре

Адресация данных • Обращение к коллекции объектов • http://../Service.svc/Customers • Обращение к объекту по PK • http://../Service.svc/Customers(523) • Обращение к полю объекта • http://../Service.svc/Customers(523)/Name • Обращение к коллекции объектов с сортировкой • http://../Service.svc/Customers?$orderby=Name • Обращение к коллекции объектов с фильтрацией • http://../Service.svc/Customers?$filter=Created gt ’2008-01-01’ • Постарничный доступ • http://../Service.svc/Customers?$top=10&$skip=20

Контроль доступа • Видимость • Управление видимостью на уровне контейнера объектов • Опции Read, Query, Write • Аутентификация • Интеграция с hosting-средой • ASP.NET, WCF, пользовательская аутентификация • Перехватчики (interceptors) • Выполняются перед GET/PUT/POST/DELETE • Включают валидацию и пользовательские политики безопасности на уровне строк данных

Перехватчики • QueryInterceptor • ChangeInterceptor [QueryInterceptor("Orders")] public Expression<Func<Order, bool>> OnQueryOrders() { return o => o.Customer.ContactName == HttpContext.Current.User.Identity.Name; } [ChangeInterceptor("Products")] public void OnChangeProducts(Product product, UpdateOperations operations) { if (operations == UpdateOperations.Delete) { throw new DataServiceException(400, "Products cannot be deleted"); } }

Конкурентный доступ • Optimistic concurrency • Интеграция с существующей HTTP инфраструктурой GET /Customers(1) 200, ETag:xx PUT/Customers(1) If-Match: xx 201, ETag:xx OR 412, ETag:xx

Практика

Итоги • Работа со связанными сущностями • Модификация данных (GET, POST, PUT, MERGE, DELETE) • Конкурентный доступ • Пакетная обработка • Сервисные операции • Различные источники данных • Безопасность, ограничение видимости • Перехватчики • Различное представление данных • Клиентские прокси (.NET, PHP, Java)

Все выше сказанное честно позаимствовано тут: • MSDN Magazine • Extending WCF with Custom Behaviors (http://msdn.microsoft.com/en-us/magazine/cc163302.aspx) • WCF Bindings In Depth (http://msdn.microsoft.com/en- us/magazine/cc163394.aspx) • TechDays.ru • DotNetCurry.com • DevCurry.com • Службы WCF Data Services • http://msdn.microsoft.com/ru-ru/library/cc668792.aspx Спасибо за внимание!

Add a comment

Related presentations