可以使用WCF数据服务返回文件吗?

时间:2011-12-28 20:19:20

标签: wcf html5 audio mp3 odata

我想使用WCF数据服务返回mp3文件,以及WCF已经提供的其他数据类型。 这可能吗?

[12/29]我在sql中有mp3二进制数据(每次约10秒)。我想用它来使用html音频标签:     <audio src="/server/svc/id" type="audio/mpeg" /> Javascript会更改ID。不知道这将如何与WCF返回二进制数组...

[12/30]在CSDL中设置mimetype后,它可以工作....

1 个答案:

答案 0 :(得分:2)

当然,你可以通过三种可能的方式做到这一点:

  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.aspxhttp://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,但是单个实体可以有多个流,每个流都可以通过其名称访问。

  4. 要访问音频流的原始值,您可以使用URL(取决于您用来公开流的方法):

    1. urltotheentity / MyBinaryProperty / $值

    2. urltotheentity / $值

    3. urltotheentity / StreamPropertyName / $值

    4. 请注意,在#1中,流的默认MIME类型将是application / octet-stream,要更改它,您需要为属性(反射提供程序)或属性添加属性MimeType到该属性的CSDL中(EF提供商)。 在#2和#3中,通过调用流提供程序来确定mime类型。