Notas del Terrible
Заметки Ужасного Зануды

Когда WCF встречает C/C++

февраля 10, 2010 11:31 by terR0Q

На прошлой неделе 2 дня занимался обертыванием маршалируемой С-шной DLL в лоно сервиса WCF. Занятие кропотливое, особое внимание надо обращаться на #ifdef и #ifndef, когда определяешь обертку типов. Главное внимательно читать документацию про указание маршалируемых типов через атрибут MarshalAs. Надо просто правильно перенести объявления структур в .NET, а далее используя методы класса Marshal перевести все указатели в нужное русло управляемой памяти с нужным типом (правда, не забывая все время явно очищать память).

Плюс к этому общая уже загвоздка с сериализацией контрактных типов от службы: не стоит использовать CollectionDataContract и наследовать передаваемый класс списку, если планируется вводить какие-то свойства, которые также будут передаваться (с атрибутом DataMember) — такие поля будут просто обнуляться после передачи через Proxy. Надо просто объявить обычное свойства типа нужного списка и пометить его, как DataMember, а весь класс — DataContract.

Задача низкоуровневая, и эффективность такова: на 1 метод сервиса пришлось напсиать ~2,000 строк кода.


Добавить комментарий


(Отображает Gravatar)

  Country flag

biuquote
  • Комментарий
  • Предпросмотр
Loading