Экспорт (0) Печать
Развернуть все

Веб-приложения Azure и сериализация

Обновлено: Январь 2015 г.

При написании приложений для Microsoft Azure возрастает степень значимости сериализации данных по сравнению с проектированием локальных приложений. Эксплуатация приложений Azure связана с большими затратами на использование базы данных, общей памяти, передачу данных и кэширование. Дополнительные сведения о ценообразовании см. в разделе Общие сведения о расценках на Azure. Кроме того, приложения Azure можно использовать с мобильных устройств, таких как телефоны, планшеты и т. д., что, впрочем, чревато появлением задержек из-за непостоянства их подключений. Все эти факторы означают, что очень важно продумать способы отправки и получения данных приложением. С уменьшением объема полезных данных сокращаются затраты на оплату полосы пропускания канала связи и хранилища и, в��зможно, задержки.

. Сериализатор определяет способ преобразования объекта .NET в XML. WCF поставляется с 4 различными сериализаторами:

После сериализации XML-данные будут записаны в канал связи как последовательность байтов. Процесс преобразования XML в поток байтов называется кодированием. WCF поддерживает следующие кодировки: Text, Binary и MTOM. Сериализация управляется атрибутами в контракте службы. По умолчанию используется DataContractSerializer, на что указывает ServiceContractAttribute. Для использования XmlSerializer примените XmlSerializerFormatAttribute к контракту службы. DataContractJsonSerializer используется, если к операции службы применяется WebGetAttribute или WebInvokeAttribute. Оба эти атрибута позволяют указывать RequestFormat и ResponseFormat. Чтобы использовать JSON для запросов и ответов, назначьте обоим этим атрибутам значение WebMessageFormat.Json. Чтобы использовать JSON, необходимо использовать параметр WebHttpBinding, который автоматически настраивает WebHttpBehavior. Дополнительные сведения о сериализации WCF см. в разделе Сериализация и десериализация, Сериализация в Windows Communication Foundation. Более подробную информацию о JSON и WCF см. в статье Введение в службы RESTfull с WCF и Обзор REST в WCF.

ImportantВажно!
Для работы с JSON требуется использовать WebHttpBinding и WebHttpBehavior, которые не поддерживают связь по SOAP. Службы, которые взаимодействуют с WebHttpBinding, не поддерживают предоставление метаданных службы, поэтому невозможно использовать функции добавления служебной ссылки Visual Studio или средство командной строки svcutil для создания прокси на стороне клиента. Дополнительные сведения о возможности программного вызова служб, использующих WebHttpBinding, см. в разделе Как использовать службы REST с WCF.

Протокол Open Data в настоящее время поддерживает следующие два формата сериализации.

  • Формат синдикации Atom (Atom): формат обмена данными на основе XML, используемый для веб-каналов.

  • Нотация объектов JavaScript (JSON): облегченный и понятный для пользователей формат обмена данными.

В OData клиенты могут запросить нужный формат сериализации ответа, задав заголовок сообщения Accept. Служба OData также предоставляет параметр системного запроса $format, который может использоваться клиентами, не имеющими возможности задавать заголовки запросов. Службы данных WCF поддерживают форматы сериализации Atom и JSON, но не поддерживают параметр запроса $format. Чтобы поддержать сериализацию JSON для всех возможных клиентов, необходимо включить поддержку параметра запроса $format в реализации служб данных WCF. Дополнительные сведения см. в руководстве по OData в Azure.

Обычно полезно продемонстрировать важные различия в размерах сериализации, показав сериализации одного, по-разному сериализованного типа. Ниже приводится определение образцового типа Person:

[DataContract(Namespace="http://example.org/person")]
    public class Person
    {
        public Person() { }
        public Person(string last, string first, string email)
        {
            lastName = last;
            firstName = first;
            emailAddress = email;
        }

        [DataMember]
        public string firstName { get; set; }

        [DataMember]
        public string lastName { get; set; }

        [DataMember]
        public string emailAddress { get; set; }
    }
}           

DataContractSerializer сериализует экземпляр Person следующим образом:

<?xml version="1.0"?>
    <Person xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://example.org/person">
    <emailAddress>kim.abercrombie@contoso</emailAddress>
    <firstName>Kim</firstName>
    <lastName>Abercrombie</lastName>
</Person>

XmlSerializer сериализует экземпляр Person следующим образом:

<?xml version="1.0"?>
<Person xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <firstName>Kim</firstName>
    <lastName>Abercrombie</lastName>
    <emailAddress>kim.abercrombie@contoso</emailAddress>
</Person>

DataContractJsonSerializer сериализует экземпляр Person следующим образом:

{"emailAddress":"kim.abercrombie@contoso","firstName":"Kim","lastName":"Abercrombie"}

Еще одна область, заслуживающая внимания, — кодировщик сообщений. Кодировщики принимают XML и преобразуют его в последовательность байтов, которую можно передать по сети. Таким образом можно значительно уменьшить размер полезных данных. Кодировщики настроены для привязки. Дополнительные сведения о кодировщиках см. в документе Выбор кодировщика сообщений Двоичные кодировщики Майкрософт обеспечивают минимальное представление данных, однако могут использоваться, только если клиент и служба выполняются на платформе .NET Framework. Если приложение требует взаимодействия с другими платформами, используйте текстовый кодировщик. Можно также реализовать собственный пользовательский кодировщик и предусмотреть сжатие. Дополнительные сведения см. в публикации Пользовательский кодировщик сообщений

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

Показ:
© 2015 Microsoft