Бінарна сериализация HTTP за допомогою ASP.NET без використання WCF, Різне, Програмування, статті

При розробці програми типу клієнт / сервер вам часто може знадобитися послати об’єкт вашому клієнту. Найбільш легким шляхом для програміста при роботі з об’єктом є отримання всього об’єкта з сервера, а не тільки деяких властивостей. Одним із способів виконання цього є використання 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();

Цікаві факти


Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*