Upload
mikhail-shcherbakov
View
255
Download
1
Embed Size (px)
Citation preview
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
Версионирование: выводы
8
Предпочтение атрибуту KnownType
Но если нужна гибкость и код клиента свой – можно использовать свой resolver.
Наследование: выводы
10
Теперь есть авторизация Большой расход памяти
Авторизация: результаты
Data Transfer Memory TrafficServiceProxy ctor 20 Мб 420 Мб
Надо что-то делать!
Пробуем исправить
11
Авторизация все еще работает Расход памяти уменьшился
Авторизация: результаты
Data Transfer Memory TrafficServiceProxy(string) 20 Мб 420 МбBehavior extension 20 Мб 300 Мб
Есть куда улучшать
13
WCF – это просто кладезь проблем◦ Смотрим расход памяти
Цепочки вызовов: выводы
Причины? Наши InternalProxy остались в памяти? Внутренние структуры связанные с IInternalContract не освободились?
WCF – это просто
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
Материалы