вторник, 4 марта 2008 г.

Веб-сервисы. Xml серелизация COM объектов.

Сегодня столкнулся со следующей проблемой. Веб-сервис должен обмениваться данными, которые получаются посредством некоторого COM класса. Данные хранятся в полях данного класса. При этом .NET не умеет серелизовать COM классы, да ему это и не нужно .
Решение проблемы может быть одним из следующих:
  1. Выдирать из класса необходимые данные и записывать в свою структуру данных, которая уже будет серелизоваться. Достоинства: можно просто управлять серелизацией класса, можно также манипулировать полученными данными в классе, можно сделать свою систему хэширования данных на основе данных структур данных. Недостатки: необходим механизм преобразования COM класса в нашу структуру данных, причем такой механизм необходимо организовывать для каждого класса, сам же механизм представляет из себя лишь перенос данных из полей COM объекта в поля данных нашего класса.
  2. Организовать "универсальный" механизм серелизации необходимых нам COM классов в виде, скажем, фабрики. Достоинства: общий механизм для серелизации, нет накладных расходов на хранение "промежуточных" классов с данными - вся работа ведется непосредственно через COM. Недостатки: данные COM объектов могут быть в спецефическом формате, и общий механизм серелизации его некорректно обработает.
  3. Организовать "обертку" для COM, свойства которой серелизуются. Достоинства: Нет накладных расходов на хранение данных COM объектов, обертка просто серелизуется. Недостатки: Для каждого COM класса нужна своя обертка.
Вообще передача самого COM объекта для веб-сервисов не актуальна - необходимо передавать только данные, которые хранятся в их полях. Но для удобства разработки необходим универсальный подход. Удобно бывает не задумываться о том, как серелизуется и десерелизуется объект, для разработчика важны только данные, переданные методами сервиса.
Возможно для этих целей уже есть стандартное решение и я на него пока(!) не натолкнулся.

Комментариев нет: