Можно ли использовать службу данных WCF для возврата файла?


Я хочу использовать службу данных WCF для возврата mp3-файлов, а также других типов данных, уже обслуживаемых WCF. Возможно ли это?

[12/29] у меня есть двоичные данные mp3 в sql (~10 секунд каждый). Я хотел бы использовать html аудио тег с ним: <audio src="/server/svc/id" type="audio/mpeg" /> Javascript изменит идентификатор. Не уверен, как это будет работать с WCF, возвращающим двоичный массив...

[12/30] это работает.... после установки mimetype в CSDL.

1 3

1 ответ:

Конечно, вы можете сделать это тремя возможными способами:

  1. Включите его в качестве бинарного свойства в существующую сущность (обычно служба размещает сущности, представляющие каждый аудиофайл в этом случае, который будет иметь одно из своих свойств, являющееся фактическим Аудио mp3). В коде это просто объявить свойство типа byte [] (и заполнить его). Плюс в том, что это действительно легко настроить. Недостатком является то, что когда вы получаете такую сущность, весь mp3 загружается и передается как кодированный текст BASE64, так он большой на проводе.

  2. Аналогичная настройка, как и выше, но вместо хранения mp3 в двоичном свойстве вы делаете сущность записью медиаресурса, вы делаете ее значение потока по умолчанию. Это описано в этом блоге более подробно: http://blogs.msdn.com/b/astoriateam/archive/2010/08/04/data-services-streaming-provider-series-implementing-a-streaming-provider-part-1.aspx и http://blogs.msdn.com/b/astoriateam/archive/2010/09/08/data-services-streaming-provider-series-part-2-accessing-a-media-resource-stream-from-the-client.aspx.

  3. В последней версии CTP WCF DS также поддерживает свойства потока. Это похоже на #2 выше, но одна сущность может иметь несколько потоков, каждый из которых доступен по своему имени.

Для доступа к исходному значению аудиопотока можно использовать URL-адрес (зависит от метода, используемого для предоставления поток):

  1. Urltotheentity/MyBinaryProperty/$value

  2. Urltotheentity/ $ value

  3. Urltotheentity/StreamPropertyName/$value

Обратите внимание, что в #1 тип MIME потока по умолчанию будет application/octet-stream, чтобы изменить его, вам нужно добавить атрибут MimeType для свойства (поставщик отражения) или атрибут в CSDL для этого свойства (поставщик EF). В #2 и #3 тип mime определяется через вызов потока поставщик.