|
|||||||
АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция |
Структура и сериализация передаваемых данныхСериализация – процесс перевода какой – либо структуры данных в последовательность битов. Сериализация используется для передачи объектов по сети и для сохранения их в файлы. Например, нужно создать распределённое приложение, разные части которого должны обмениваться данными со сложной структурой. В таком случае для типов данных, которые предполагается передавать, пишется код, который осуществляет сериализацию и десериализацию. Приложение-получатель создаёт объект того же типа и вызывает код десериализации, в результате получая объект с теми же данными, что были в объекте приложения-отправителя. По такой схеме работает, например, сериализация объектов через SOAP в Microsoft.NET. Полный список способов передачи данных и сериализации: · Использование контрактов данных (DataContractSerializer); · Использование класса XmlSerializer · Использование контрактов сообщений · Использование класса сообщений (Message) · Изменение структуры сообщения на прямую (существует несколько способов) По умолчанию в WCF в качестве сериализатора используется класс DataContractSerializer. Так как структура СМЭВ сообщения не является сложной, поэтому, в своей работе, я использовал класс XmlSerializer и контракт сообщений. Класс XmlSerializer имеет одно важное преимущество, по сравнению с контрактами данных – это возможность добавить префиксы пространства имен к элементу. Структура данных возвращаемого класса представлена в главе 3. Для переключения способа серализации, в интерфейсе класса, для вызываемого метода указываем атрибут [XmlSerializerFormat] (Рис. 7). Чтобы сериализовать поля и классы, используется три вида атрибутов: · XmlRoot – сериализует класс, как корневой элемент XML. · XmlElement – сериализует поле класса, как элемент XML. · XmlAttribute – сериализует поле класса, как атрибут элемента XML. Пример сериализации класса ActorType представлен на рисунке 9. В XML будет выглядеть: <Actor> <Code/> <Name/> </Actor> Чтобы задать пространство имен (namespace) элемента, нужно указать свойство Namespace в атрибуте, пример: [XmlRoot(Namesapce = http://www.testnamesapce.com/ru)] Объявление свойства [XmlNamesapceDeclaration] позволяет задать для элемента XML префикс пространства имен (Рис. 10) Рисунок 9 – Применение свойств XmlRoot и XmElement Рисунок 10 – Применение свойства XmlNamespaceDeclaration Выше описан способ сериализации при использовании класса XmlSerializer. Все возвращаемые и принимаемые классы добавляются в элемент <body>, но сообщение запрос будет содержать элемент <smevheader> в блоке <header>. Для добавление произвольного элемента в блок <header> используется контракты сообщений. Указываем атрибут [MessageContract] для возвращаемого или, получаемого в виде контракта, класса и используем два атрибута: · [MessageBodyMember] – сериализует объект, как элемент блока <body> · [MessageHeader] – сериализует объект, как элемент блока <header> Пример использования контракта сообщения приведен на рисунке 11. Рисунок 11 – Использование контракта сообщения
Поиск по сайту: |
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.003 сек.) |