Что такое WCF?
Управление безопасностью WCF сервисов
Расширяемость WCF сервисов
WCF 4.0 What’s new?
Ссылка на примеры кода: https://www.dropbox.com/s/9anx0ptow2q96zz/HelloWCF.part2.zip
6. Типы контрактов Контракт
(Что)
• Описывает операции,
выполняемые сервисом
• CLR тип соответствует WSDL
Service
• Структура данных
• CLR тип соответствует XSDData
• Структура сообщений
• CLR тип соответствует SOAP
сообщению
Message
8. Поведение
Поведение предназначено для модификации и
расширения функциональности сервиса или клиента
Поведение
(Behavior)
[ServiceBehavior(
InstanceContextMode =
InstanceContextMode.Single,
IncludeExceptionDetailInFaults = true)]
public class Service : IService {
[OperationBehavior(
ReleaseInstanceMode =
ReleaseInstanceMode.AfterCall)]
public DateTime GetCurrentDate() {
return DateTime.Now;
}
11. Итоги
• WCF обобщает все предыдущие технологии меж процессорного
взаимодействия
• Транспорт: HTTP, TCP, NamedPipes, MSMQ, Custom
• Кодировка: Text, Binary, MTOM, Custom
• Поддерживаются сессии, гарантия доставки, шифрование,
транзакции, …., Custom
• Взаимодействие с сервером прозрачно для клиента
• Контракт говорит – Что
• Привязка говорит – Как
• Адрес говорит – Где
• Поведение молча манипулирует сервисом
14. Режимы безопасности
• отсутствует (None)
• на уровне сообщения (Message)
• на транспортном уровне (Transport)
• смешанный (TransportWithMessageCredential)
• двухуровневый (Both)
• TransportCredentialOnly (basicHttpBinding only)
клиент сервис
клиент сервис0523422E8A8
клиент сервис
15. Шифрование транспорта
Производительность
Аппаратное шифрование
Потоковая передача данных
Point-to-point безопасность
клиент сервис1 сервис2
Шифрование сообщение
End-to-end безопасность
Независимость от транспортного уровня
Частичное шифрование или подпись сообщения
ProtectionLevel атрибут [None | Sign | EncryptAndSign]
Более ресурсоемко чем шифрование транспорта
клиент сервис1 сервис20523422E8A8 0523422E8A8
20. Сценарий: Корпоративный WCF-сервис
• Бинарное сжатие
• Имперсонация/делегирование
• Шифрование билетом Kerberos
Windows
Windows
контроллер
домена
21. Итоги
• Безопасность по умолчанию включена
• Безопасность на уровне транспорта и SOAP
сообщения
• Интероперабельность
• WS-Security
• SAML токены
• Поддержка большинства стандартных сценариев
• Расширяемость и гибкость
24. Расширяемость прокси-клиента
Метод 1 Метод 2
ClientOperation ClientOperation
ClientRuntime
…
Encoder
Transport
ОбъектыОбъекты
Сообщение
1
2
3
Проверка
параметров
1
Формирование
сообщения
(сериализация)
2
Проверка
сообщения
3
Channel stack
25. Расширяемость диспетчера
Операция 1 Операция 2
DispatchOperation DispatchOperation
DispatchRuntime
…
Encoder
Transport
5
3
2
Channel stack
1
4
1 Проверка
сообщения
2 Выбор операции
Формирование
объекта
(десериализация)
3
4
Вызов
операции
5
Проверка
параметров
ОбъектыОбъекты
Сообщение
26. Интерфейсы расширений
Этап Интерфейс перехватчика Описание
Проверка
параметров
IParameterInspector
Используется до и после вызова
для проверки и изменения
значений параметров
Форматирование
сообщений
IDispatchMessageFormatter
IClientFormatter
Используется для сериализации и
десериализации
Проверка
сообщений
IDispatchMessageInspector
IClientMessageInspector
Используется до отправки и после
получения для проверки и замены
содержимого сообщений
Выбор операций
IDispatchOperationSelector
IClientOperationSelector
Используется для выбора
вызываемой операции для
определенного сообщения
Вызов операции IOperationInvoker
Используется для вызова
операции
Клиент Сервис
Клиент Сервис
Клиент Сервис
Клиент Сервис
Сервис
28. Поведение
• Это особый тип класса, расширяющий поведение серверной или
клиентской среды выполнения
• Поведения применяются к классам ServiceHost на сервере и
ChannelFactory на клиенте
• 4 типа пользовательских поведений:
Сервис (IServiceBehavior)
Конечная точка (IEndpointBehavior)
Контракт (IContractBehavior)
Операция (IOperationBehavior)
• IBehavior
• Validate
• AddBindingParameters
• ApplyDispatchBehavior
• ApplyClientBehavior
29. Уровни влияния поведений
Контекст Интерфейс Влияние
Service Endpoint Contract Operation
Service IServiceBehavior ✗ ✗ ✗ ✗
Endpoint IEndpointBehavior ✗ ✗ ✗
Contract IContractBehavior ✗ ✗
Operation IOperationBehavior ✗
40. prevContactIndex++;
return Contacts[prevContactIndex];
SOAP – это выполнение операции
SOAP
Service
POST /ServiceAccess/MyService1.svc
Host: www.site.com
SOAPAction: GetNextContact
…
<soap:Envelope xmlns:soap= …
…
</soap:Envelope>
SOAP
Client
Contact Data
41. return GetContact(2);
REST – это запрос ресурса
REST
Service
GET site.com/MyService1.svc/Contact(2)
REST
Client
Contact Data
42. Принципы REST
• Пользователь взаимодействуют с ресурсами, которыми может
быть всё, что можно поименовать
• Каждый ресурс имеет свой уникальный идентификатор – URI
• Взаимодействие с ресурсами происходит по средствам HTTP
(команды GET, POST, PUT и DELETE)
• Ресурсы описывают себя сами
• Content-Type, Content-Length, …
• В ресурсах могут содержатся ссылки на другие ресурсы
43. Ограничения REST
• Stateless – отсутствие состояния у сервера. Вся информация,
необходимая для обработки запроса ресурса, содержится в
самом запросе
• Idempotent – повторное действие над объектом не
изменяет его
• Side Effects – запрашивая значение объекта по GET не должно
происходить изменение этого или другого объекта
• HTTP only
44. Интернет магазин
Клиенты
Клиент 1
Клиент 2
Счет 1
Счет 2
……
Клиент N
Ресурс URI
Клиенты mysite.com/Clients/
Клиент mysite.com/Clients/{Client}
Счет mysite.com/Clients/{Client}/{account}
…. …..
45. WebGet WebInvoke
• WebGet – связывает метод с HTTP GET запросом
• WebInvoke – все остальные HTTP запросы (POST, PUT, …)
• UriTemplate – шаблон URI для связывания метода с запросом
48. Адресация данных
• Обращение к коллекции объектов
• http://../Service.svc/Customers
• Обращение к объекту по PK
• http://../Service.svc/Customers(523)
• Обращение к полю объекта
• http://../Service.svc/Customers(523)/Name
• Обращение к коллекции объектов с сортировкой
• http://../Service.svc/Customers?$orderby=Name
• Обращение к коллекции объектов с фильтрацией
• http://../Service.svc/Customers?$filter=Created gt ’2008-01-01’
• Постарничный доступ
• http://../Service.svc/Customers?$top=10&$skip=20
49. Контроль доступа
• Видимость
• Управление видимостью на уровне контейнера
объектов
• Опции Read, Query, Write
• Аутентификация
• Интеграция с hosting-средой
• ASP.NET, WCF, пользовательская аутентификация
• Перехватчики (interceptors)
• Выполняются перед GET/PUT/POST/DELETE
• Включают валидацию и пользовательские
политики безопасности на уровне строк данных
50. Перехватчики
• QueryInterceptor
• ChangeInterceptor
[QueryInterceptor("Orders")]
public Expression<Func<Order, bool>> OnQueryOrders() {
return o => o.Customer.ContactName ==
HttpContext.Current.User.Identity.Name;
}
[ChangeInterceptor("Products")]
public void OnChangeProducts(Product product,
UpdateOperations operations) {
if (operations == UpdateOperations.Delete) {
throw new DataServiceException(400,
"Products cannot be deleted");
}
}
51. Конкурентный доступ
• Optimistic concurrency
• Интеграция с существующей
HTTP инфраструктурой
GET /Customers(1)
200, ETag:xx
PUT/Customers(1)
If-Match: xx
201, ETag:xx
OR
412, ETag:xx
53. Итоги
• Работа со связанными сущностями
• Модификация данных (GET, POST, PUT, MERGE,
DELETE)
• Конкурентный доступ
• Пакетная обработка
• Сервисные операции
• Различные источники данных
• Безопасность, ограничение видимости
• Перехватчики
• Различное представление данных
• Клиентские прокси (.NET, PHP, Java)
54. Все выше сказанное честно позаимствовано тут:
• MSDN Magazine
• Extending WCF with Custom Behaviors
(http://msdn.microsoft.com/en-us/magazine/cc163302.aspx)
• WCF Bindings In Depth (http://msdn.microsoft.com/en-
us/magazine/cc163394.aspx)
• TechDays.ru
• DotNetCurry.com
• DevCurry.com
• Службы WCF Data Services
• http://msdn.microsoft.com/ru-ru/library/cc668792.aspx
Спасибо за внимание!
Editor's Notes
None No security is provided; all information is passed in clear text. (по умолчанию для basicHttpBinding)Transport Mutual authentication and message protection are provided at the transport level.Message Mutual authentication and message protection are provided at the message level. (по умолчанию для wsHttpBinding)Both Mutual authentication and message protection are provided at both the transport and message levels. This is far more than is necessary for most scenarios.TransportWithMessageCredentialClient authentication is provided at the message level, and message protection and service authentication are provided at the transport level.TransportCredentialOnlyMutual authentication is provided at the transport level; no message protection is provided. This option is available only on basicHttpBinding.