【问题标题】:Can WCF Data Service be used to return a File?可以使用 WCF 数据服务返回文件吗?
【发布时间】:2011-12-28 20:19:20
【问题描述】:

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

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

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

【问题讨论】:

标签: wcf html audio mp3 odata


【解决方案1】:

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

  1. 将其作为二进制属性包含在现有实体上(在这种情况下,通常服务托管代表每个音频文件的实体,其属性之一是实际的音频 mp3)。在代码中,这只是声明一个 byte[] 类型的属性(并填写它)。好处是这很容易设置。缺点是当你 GET 这样的实体时,整个 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 类似,但单个实体可以有多个流,每个流都可以通过其名称访问。

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

  1. urltotheentity/MyBinaryProperty/$value

  2. urltotheentity/$value

  3. urltotheentity/StreamPropertyName/$value

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

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多