ASP.net/WCF Рекомендации по обработке изображений сервиса

#asp.net #wcf #image

#asp.net #wcf ( ВКФ ) #изображение #wcf

Вопрос:

Я хотел бы получить несколько советов о том, как подойти к задаче программирования.

Я создаю веб-сайт, который собирает данные с течением времени (пользователи вводят данные), а затем отображает пространственные карты (по запросу), созданные на основе этих данных.

Каждый раз, когда пользователь вводит данные, я использую веб-сервис для сохранения данных в базе данных SQL (используя ef4).

Дизайнерское решение, которое у меня есть сейчас, заключается в том, что когда клиент запрашивает карту / изображение, как я должен вернуть ему изображение.

Должен ли я:

  1. При вызове службы WCF создайте изображение и верните это изображение через службу
  2. При вызове службы WCF создайте изображение, сохраните его где-нибудь на стороне сервера, верните путь или URI / URL к изображению

Я надеялся выполнить (2), но я не уверен, где сохранить изображение и какие последствия это имеет при попытке его предоставления.

Веб-сервис и Asp.Net приложение, скорее всего, будет запущено с того же сервера, если это вообще поможет.

Любые советы о том, как действовать дальше, были бы весьма признательны, особенно такие детали, как, где безопасно сохранять из службы WCF и т. Д

Спасибо.

(Я использую сервис, потому что будут другие клиенты, отличные от Asp.Net приложение, которое запрашивает данные).

Ответ №1:

Это во многом будет зависеть от того, какой API могут использовать ваши клиенты? Если им нужен SOAP API, то вам придется использовать либо службы WCF, либо asmx для предоставления изображений. Однако лучшей альтернативой, безусловно, является HTTP API, т.Е. для доступа к определенному изображению предоставляется уникальный URL-адрес — вы можете использовать URL в стиле REST или можете принять параметры через строку запроса. По сути, URL должен содержать всю информацию, необходимую для извлечения изображения из базы данных.

Теперь вы можете напрямую выбрать службы WCF на основе REST для обслуживания этих изображений или можете поместить ASP.NET HTTP-обработчик на основе (как фасад) над службами WCF для их обслуживания. Если вы собираетесь использовать WCF, а размеры изображений велики, тогда рассмотрите возможность потоковой передачи. Я предпочту создание фасада, поскольку это поможет вам перенести некоторые важные проблемы, такие как кэширование и потоковая передача, за пределы мира WCF. Таким образом, в таком сценарии службы WCF будут использовать наилучшую конечную точку, возможную для доставки данных изображения из хранилища данных. Ваш фасадный HTTP-обработчик преобразует URL-адрес в необходимый вызов службы WCF, получает данные изображения, кэширует в файловой системе и отправляет клиенту. Последующие запросы будут обслуживаться через это кэшированное изображение. Поскольку вы используете URL-адреса и запросы get, изображения также будут кэшироваться на стороне клиента (вы можете управлять этим, отправляя явные заголовки в вашем обработчике фасада). Обычно запросов на извлечение изображения будет значительно больше, чем запросов на обновление данных — обслуживая запросы get через другой обработчик, вы можете масштабировать его независимо от служб WCF.

Ответ №2:

Я бы использовал HTTP-обработчик для использования вашего сервиса WCF на основе некоторых параметров. Я использую нечто подобное для извлечения изображения, хранящегося в виде большого двоичного объекта в базе данных, и установки для изображения некоторых размеров по умолчанию.

HTTP-обработчик будет вызываться из тега изображения на asp.net страница.

В этой статье содержится больше информации о http-обработчиках