Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Игорь Лабутин «WCF: Удобно или проблемно?»

Игорь Лабутин «WCF: Удобно или проблемно?»

Если возникает задача обеспечения обмена данными между приложениями на платформе .NET, то WCF прочно вошел в набор инструментов которые позволяют сделать это быстро и сравнительно легко. Действительно ли это легко или эта кажущаяся легкость скрывает огромное поле граблей/проблем которые трудно заметить? В докладе я расскажу об опыте использования WCF в разработке, а также о проблемах и их решениях которые нам встретились.

DotNetRu

April 02, 2016
Tweet

More Decks by DotNetRu

Other Decks in Programming

Transcript

  1.  15 лет в индустрии ◦ С/С++: Windows, Linux, QNX,

    Embedded ◦ .NET – последние 8 лет  Интересы ◦ Сети, протоколы обмена данными ◦ Проблемы производительности 2
  2. Sockets Memory Mapped Files Named Pipes WM_COPYDATA .NET Remoting COM

    DCOM Web Services Windows Communication Foundation Первый релиз в составе .NET FW 3.0 21.11.2006 3
  3. Address Binding Contract Тут без Visual Studio не обойтись! Теперь

    у нас есть самое настоящее клиент-серверное приложение! 4
  4.  Это неизбежно!  В большинстве случаев работает без проблем

    Клиент 1.0 Сервер 2.0 GetState() -> ServerState Клиент 2.0 GetState() -> ExtendedServerState 5
  5.  Enums: Либо backing field и ручная обработка неожиданных значений

    на клиенте, либо сервер должен следить что кому посылается  Можно, но осторожно   MS Best Practices: Data Contract Versioning ◦ http://bit.ly/1MDvOGm 6
  6.  Предпочтение атрибуту KnownType  Но если нужна гибкость и

    код клиента свой – можно использовать свой resolver. 8
  7. 9

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

    Data Transfer Memory Traffic ServiceProxy ctor 20 Мб 420 Мб Надо что-то делать! Пробуем исправить 10
  9.   Авторизация все еще работает   Расход памяти

    уменьшился Data Transfer Memory Traffic ServiceProxy(string) 20 Мб 420 Мб Behavior extension 20 Мб 300 Мб Есть куда улучшать 11
  10.  WCF – это просто кладезь проблем ◦ Смотрим расход

    памяти  Причины?  Наши InternalProxy остались в памяти?  Внутренние структуры связанные с IInternalContract не освободились?  WCF – это просто 13
  11. 15

  12. 16

  13. InternalProxy p = new InternalProxy(); p.DoSomething(); using (InternalProxy p =

    new InternalProxy()) { p.DoSomething(); } Использование using всегда полезно, даже если кажется что освобождать нечего. 18
  14.  Простые вещи требуют минимального кода  Сложные вещи сделать

    можно! ◦ Более 30 точек расширения ◦ В большинстве случаев требуют много кода и понимания фабрик ◦ Активно используются атрибуты 19
  15.  WCF – это удобно и в большинстве случаев просто

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