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

标签 wcf html 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. 将其作为现有实体的二进制属性包含在内(在这种情况下,通常服务托管代表每个音频文件的实体,其属性之一是实际的音频 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 类似,但单个实体可以有多个流,每个流都可以通过其名称访问。

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

  1. urltotheentity/MyBinaryProperty/$value

  2. urltotheentity/$值

  3. urltotheentity/StreamPropertyName/$value

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

关于wcf - 可以使用 WCF 数据服务返回文件吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8660819/

相关文章:

c# - Wcf 并行和异步调用?

java - android - WCF Rest服务通信

c# - 找不到与具有绑定(bind) WebHttpBinding 的终结点的方案 https 匹配的基址。注册的基址方案是 [http]

php - Paypal IPN 设置

c++ - 将分贝范围转换为字节范围

使用 ssl (https) 的 POST 的 WCF 问题

div 中的 HTML 采用父 HTML 的 CSS

java - 无法同时播放声音

android - Cordova Media 插件在 Android 6 (Marshmallow) 上无法播放 mp3 互联网音频流

html - 停靠 div 在父 div 的顶部垂直显示为内联 block