Вложение изображения как часть DTO или отдельная загрузка (ASP.NET MVC 2 & WCF REST) - PullRequest
1 голос
/ 12 мая 2011

У меня есть клиентское приложение ASP.NET MVC 2, которое использует приложение службы RESTful WCF для сохранения данных. Появилось новое требование для поддержки изображения, прикрепленного / связанного с одним из моих существующих объектов домена (Product).

В настоящее время клиентское приложение вызывает службу для получения списка продуктов (в виде списка облегченных объектов ProductInfo) и отображает этот список для пользователя. Когда пользователь щелкает элемент в списке, клиент вызывает службу, чтобы получить конкретный объект Product, который поддерживает редактирование пользователем. После сохранения клиент отправляет обновленный Продукт в службу для сохранения.

Новое требование требует от меня отображения соответствующего изображения в списке, а также разрешения пользователю устанавливать / заменять изображение при редактировании Продукта. Текущее изображение также отображается в редакторе продукта. С каждым продуктом будет связано только одно изображение, и оно потребуется.

  1. Является ли Stream лучшим способом передачи данных изображения между клиентом и сервером, или мне следует использовать Byte []?

  2. Для списка было бы целесообразно добавить новое свойство Image в ProductInfo типа Stream (или Byte []) или потребовать отдельный вызов службы для загрузки изображения?

  3. Аналогично для редактирования, нужно ли просто обрабатывать данные изображения как любое другое свойство и передавать их назад и вперед по проводу, используя свойство Image?

Ответы [ 2 ]

1 голос
/ 12 мая 2011

Является ли Stream лучшим способом передачи данных изображения между клиентом и сервером, или мне следует использовать Byte []?

Это будет зависеть от используемой вами привязки, но с SOAP, даже если вы в конечном итоге выберете Stream, когда сериализатору потребуется отправить его по проводам, это будет байтовый массив в кодировке base64.

Для списка было бы разумно добавить новое свойство Image в ProductInfo типа Stream (или Byte []) или потребовать отдельного вызова службы для загрузки изображения?

Я бы пошел с отдельным звонком, чтобы загрузить каждое изображение с указанным идентификатором продукта. Таким образом, вы не будете загружать изображения каждый раз, когда хотите просмотреть информацию о продукте без предварительного просмотра, что может сэкономить пропускную способность.

Другая возможность - загрузить все изображения за один раз из службы WCF, а затем вызвать действие контроллера, которое загрузит их с помощью AJAX. Затем вставьте их в HTML как данные base64 (как Google делает с предварительным просмотром изображений на странице результатов)

Аналогично для редактирования, нужно ли просто обрабатывать данные изображения как любое другое свойство и передавать их назад и вперед по проводу, используя свойство Image?

Для редактирования у вас может быть служебный метод, который будет принимать массив байтов и идентификатор элемента, который вы обновляете.

0 голосов
/ 18 мая 2011

Хотя я ценю ответ Дарина и изначально шел по этому пути, в итоге я пошел тем же подходом, изложенным в Pro ASP.NET MVC 2 Framework .

Глава 6 описывает, как изображение может быть загружено как часть страницы редактирования для объекта Product, а затем отображено с помощью действия контроллера на другой странице. Единственное отличие в моем приложении состоит в том, что постоянство обрабатывается на другом уровне через интерфейс веб-службы RESTful. Однако на основе подхода, показанного в книге, я решил использовать один DTO, который содержит свойства для данных двоичного изображения и строковой информации MIME-типа.

Если бы у меня был другой пользовательский интерфейс или более тяжелый объект для обхода, я бы определенно пересмотрел этот подход, но для меня, на этот раз, это прекрасно работает.

...