+7 (495) 229-0436   shopadmin@itshop.ru 119334, г. Москва, ул. Бардина, д. 4, корп. 3
 
 
Вход
 
 
Каталог
 
 
Подписка на новости
Новости ITShop
Windows 7 и Office: Новости и советы
Обучение и сертификация Microsoft
Вопросы и ответы по MSSQLServer
Delphi - проблемы и решения
Adobe Photoshop: алхимия дизайна
 
Ваш отзыв
Оцените качество магазина ITShop.ru на Яндекс.Маркете. Если вам нравится наш магазин - скажите об этом Google!
 
 
Способы оплаты
 
Курс расчета
 
 1 у.е. = 94.09 руб.
 
 Цены показывать:
 
 
 
 
  
Новости, статьи, акции
 

Бинарная сериализация HTTP посредством ASP.NET без использования WCF

25.02.2010 14:04

При разработке приложения типа клиент/сервер вам зачастую может понадобиться послать объект вашему клиенту. Наиболее легким путем для программиста при работе с объектом является получение всего объекта с сервера, а не только некоторых свойств. Одним из способов выполнения этого является использование WCF или Веб-сервисов, что предоставляет вам большой набор инструментов, таких как сериализация. Однако эти наборы технологий зачастую привносят немало перерасходов и сложностей в ваш проект, чего вам наверняка не хотелось бы видеть в случаях, когда вам необходимо просто переслать и получить один или более объектов.

При такой дилемме стоило потратить некоторое время на поиск решения. Нашей целью было нахождение простого и ясного метода создания объекта на сервере, его сериализация и отсылка обратно к клиенту. Безопасность и функциональная совместимость не входили в список задач, но они могут быть реализованы позже. Ограничением было то, что нам необходимо было быстрое решение, и оно должно было работать посредством стандартного HTTP-протокола.

Решение заключается в создании ASP.NET-страницы, которая считывает строку запроса для определения того, какой объект необходимо вернуть, создает его, сериализует его в двоичный формат и возвращает в виде двоичного приложения к клиенту. Клиент загружает файл при помощи класса WebClient() и преобразовывает его из последовательной формы в объект.

Как клиент, так и сервер используют библиотеку классов, содержащую общий объект. Поначалу мы реализовали это при помощи XML-сериализации, но она оказалась довольно медленной, но тем не менее вы можете ее использовать при необходимой функциональной совместимости.

Пояснения

Вам стоит помнить о том, что это не единственный способ - вы наверняка можете выполнить это при помощи WCF, используя специализированную привязку или MTOM, но нам кажется, что данные методы чересчур вовлечены и привносят ненужную сложность в простые проекты.

Использование кода

При загрузке страницы веб-сервера мы включаем следующий код для проверки того, какой объект требует клиент, и возвращаем объект, преобразованный в двоичное приложение.
protected void Page_Load(object sender, EventArgs e)
{
    // Проверка того, какой объект необходим клиенту
    if (Request.QueryString["op"] == "getdata")
    {
        // Создание нового экземпляра объекта с выборочными данными
        var data = new SampleData();
        data.moreData = 34343;
        data.otherData = true;
        data.SomeData = "fewoifjweofjwepo";
        // Установка типа содержимого и заголовка
        // байтовый поток позволяет нам посылать данные бинарного типа
        // название файла здесь не относится к делу так как на самом деле
        // он не используется клиентом
        Response.ContentType = "application/octet-stream";
        Response.AppendHeader("Content-Disposition",
                             "attachment; filename=sampleData.bin");
        // Сериализация объекта и запись его в ответный поток
        var binaryFormatter = new BinaryFormatter();
        binaryFormatter.Serialize(Response.OutputStream, data);
        // Важно завершить ответ, иначе клиенту будут посланы другие данные страницы  
            Response.End();
    }
Со стороны клиента мы создали запрос к серверу используя строку запроса и преобразовали ответ.
// Создание ссылки для сервиса, она может быть сохранена в файле конфигурации
string url = "http://localhost/BinaryServiceSample/Default.aspx?op=getdata";
// Закрузка данных в битовый массив
// Эти данные содержат реальный объект
var client = new WebClient();
byte[] result = client.DownloadData(url);
// Создание потока данных для хранения объекта
var mem = new MemoryStream(result);
var binaryFormatter = new BinaryFormatter();
var data = (SampleData)binaryFormatter.Deserialize(mem);
mem.Close();
// Запись объекта в консоль
Console.Write(data.ToString());
Console.ReadLine();

Интересные факты

  • Хотя двоичная сериализация может показаться более удобной, она может не быть совместимой с различными платформами.
  • Сериализация объектов при помощи двоичной сериализации значительно быстрее, чем XML.
  • Данный код не включает в себя проверку на ошибки, но это с легкостью можно внедрить. Мы не включили ее для простоты и удобства в изучении.
  • Одним из способов добавить немного безопасности является шифрование битов и отсылка их клиенту. Это, конечно, сделает функциональную совместимость более сложной задачей.
  • Дополнительная скорость в передаче данных может быть достигнута при помощи компрессии битов до их отсылки - ICSharpCode.SharpZipLib.dll может сжать биты памяти и при этом оно бесплатно, но вы также можете выполнить это при помощи .NET Framework путем реализации HTTP-компрессии и внедрения в ваш код.
  • Сериализация объекта, на первый  взгляд, придает больше контроля над тем, как все выполняется, причем не усложняя сам процесс.

Ссылки по теме

  
Помощь
Задать вопрос
 программы
 обучение
 экзамены
 компьютеры
Бесплатный звонок
ICQ-консультанты
Skype-консультанты

Общая справка
Как оформить заказ
Тарифы доставки
Способы оплаты
Прайс-лист
Карта сайта
 
Бестселлеры
Курсы обучения "Atlassian JIRA - система управления проектами и задачами на предприятии"
Microsoft Windows 10 Профессиональная 32-bit/64-bit. Все языки. Электронный ключ
Microsoft Office для Дома и Учебы 2019. Все языки. Электронный ключ
Курс "Oracle. Программирование на SQL и PL/SQL"
Курс "Основы TOGAF® 9"
Microsoft Office 365 Персональный 32-bit/x64. 1 ПК/MAC + 1 Планшет + 1 Телефон. Все языки. Подписка на 1 год. Электронный ключ
Курс "Нотация BPMN 2.0. Ее использование для моделирования бизнес-процессов и их регламентации"
 

О нас
Интернет-магазин ITShop.ru предлагает широкий спектр услуг информационных технологий и ПО.

На протяжении многих лет интернет-магазин предлагает товары и услуги, ориентированные на бизнес-пользователей и специалистов по информационным технологиям.

Хорошие отзывы постоянных клиентов и высокий уровень специалистов позволяет получить наивысший результат при совместной работе.

В нашем магазине вы можете приобрести лицензионное ПО выбрав необходимое из широкого спектра и ассортимента по самым доступным ценам. Наши менеджеры любезно помогут определиться с выбором ПО, которое необходимо именно вам. Также мы проводим учебные курсы. Мы приглашаем к сотрудничеству учебные центры, организаторов семинаров и бизнес-тренингов, преподавателей. Сфера сотрудничества - продвижение бизнес-тренингов и курсов обучения по информационным технологиям.



 

О нас

 
Главная
Каталог
Новинки
Акции
Вакансии
 

Помощь

 
Общая справка
Как оформить заказ
Тарифы доставки
Способы оплаты
Прайс-лист
Карта сайта
 

Способы оплаты

 

Проекты Interface Ltd.

 
Interface.ru   ITShop.ru   Interface.ru/training   Olap.ru   ITnews.ru  
 

119334, г. Москва, ул. Бардина, д. 4, корп. 3
+7 (495) 229-0436   shopadmin@itshop.ru
Проверить аттестат
© ООО "Interface Ltd."
Продаем программное обеспечение с 1990 года