22
WCF. Легко или проблемно? Игорь Лабутин, 02.04.2016

WCF. Легко или проблемно

Embed Size (px)

Citation preview

WCF. Легко или проблемно?

Игорь Лабутин, 02.04.2016

2

15 лет в индустрии◦ С/С++: Windows, Linux, QNX, Embedded◦ .NET – последние 8 лет

Интересы◦ Сети, протоколы обмена данными◦ Проблемы производительности

О себе

3

WCF – откуда и зачемSockets

Memory Mapped Files

Named PipesWM_COPYDATA .NET

RemotingCOM

DCOMWeb Services

Windows Communication

Foundation Первый релиз в составе .NET FW 3.0 21.11.2006

4

Address Binding Contract

Клиент-сервер: пробуем

Тут без Visual Studio не обойтись!

Теперь у нас есть самое настоящее клиент-серверное приложение!

5

Это неизбежно! В большинстве случаев работает без проблем

ВерсионированиеКлиент

1.0Сервер

2.0GetState() -> ServerState

Клиент2.0

GetState() -> ExtendedServerState

Но не всегда!

Пробуем!

6

Enums: Либо backing field и ручная обработка неожиданных значений на клиенте, либо сервер должен следить что кому посылается

Можно, но осторожно MS Best Practices: Data Contract

Versioning◦ http://bit.ly/1MDvOGm

Версионирование: выводы

7

Один класс это скучно. Наследуем

ServerStateServerState

RunningServerState

Пробуем!

8

Предпочтение атрибуту KnownType

Но если нужна гибкость и код клиента свой – можно использовать свой resolver.

Наследование: выводы

9

Сервер без авторизации?

Исправляем!

10

Теперь есть авторизация Большой расход памяти

Авторизация: результаты

Data Transfer Memory TrafficServiceProxy ctor 20 Мб 420 Мб

Надо что-то делать!

Пробуем исправить

11

Авторизация все еще работает Расход памяти уменьшился

Авторизация: результаты

Data Transfer Memory TrafficServiceProxy(string) 20 Мб 420 МбBehavior extension 20 Мб 300 Мб

Есть куда улучшать

12

Цепочки вызововКлиент Сервер 3rd-party

Делаем!

13

WCF – это просто кладезь проблем◦ Смотрим расход памяти

Цепочки вызовов: выводы

Причины? Наши InternalProxy остались в памяти? Внутренние структуры связанные с IInternalContract не освободились?

WCF – это просто

14

Куда делась память?

Может, дело в отсутствии using ?

15

Клиент без using

16

Куда делась память?

17

Цепочки вызовов: подробностиКлиент Сервер 3rd-party

Prox

yPr

oxy

Prox

yPr

oxy

Надо что-то

решать!

18

Цепочки вызовов: итогInternalProxy p = new InternalProxy();

p.DoSomething();using (InternalProxy p = new InternalProxy()){ p.DoSomething();}

Использование using всегда полезно, даже если кажется что освобождать нечего.

19

Простые вещи требуют минимального кода

Сложные вещи сделать можно!◦ Более 30 точек расширения◦ В большинстве случаев требуют много кода и

понимания фабрик◦ Активно используются атрибуты

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

20

WCF – это удобно и в большинстве случаев просто

Если что-то необходимо сделать – скорее всего найдется способ (и не один!)

Заключение

21

Series of posts by Carlos Figueira at http://bit.ly/wcfextensibility

MSDN

Материалы

22

E-mail: [email protected]

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