4

我正在尝试编写一个可以将 mp3 文件发送到客户端的 WCF 服务。我需要它来使用渐进式下载传输 mp3 文件,因为客户端是一个 android 应用程序,我希望它尽快开始播放。如何使用 WCF 进行渐进式下载?可能吗?

这是我到目前为止所拥有的。这似乎有效,但不是渐进式下载。它在 android 应用程序中播放,但只有在整个文件下载后才能播放。

服务合同:

[OperationContract, WebGet(UriTemplate = "/GetFileStream/?filepath={virtualPath}")]
    Stream GetFileStream(string virtualPath);

服务配置:

    <bindings>
        <webHttpBinding>
            <binding name="streamedHttpBinding" transferMode="StreamedResponse"
                     maxReceivedMessageSize="1000000000">
            </binding>
        </webHttpBinding>
    </bindings>
    <service name="...">
            <endpoint address="" behaviorConfiguration="restful" binding="webHttpBinding"
                bindingConfiguration="streamedHttpBinding"
                contract="..." />

     </service>
     <behaviors>
        <endpointBehaviors>
            <behavior name="restful">
                <webHttp />
            </behavior>
        </endpointBehaviors>
        <serviceBehaviors>
            <behavior name="">
                <serviceMetadata httpGetEnabled="true" />
                <serviceDebug includeExceptionDetailInFaults="true" />
            </behavior>
        </serviceBehaviors>
    </behaviors>

如果您可以提供有关渐进式下载的来源的链接,那也会很有帮助。对于渐进式下载+ wcf,我的谷歌搜索并没有出现太多。感谢你的帮助。

安卓代码:

player.reset();
player.setAudioStreamType(AudioManager.STREAM_MUSIC);
player.setDataSource(path);
player.prepare();
player.start();

player 是一个MediaPlayer对象。我将数据源设置为路径中的 url。

4

2 回答 2

2

所以我弄清楚出了什么问题。WCF 确实进行渐进式下载。我认为当您从服务返回 Streams 时,行为配置部分是必要的。但是对于 webhttpbinding,为了进行渐进式下载,不应该设置它。将绑定配置设置为 streamedResponse 将启用分块,这不是渐进式下载。正确的配置如下。

<bindings>
</bindings>
<service name="...">
        <endpoint address="" behaviorConfiguration="restful" binding="webHttpBinding"
            contract="..." />

 </service>
 <behaviors>
    <endpointBehaviors>
        <behavior name="restful">
            <webHttp />
        </behavior>
    </endpointBehaviors>
</behaviors>

请注意,端点上没有 bindingConfiguration。

感谢@MisterSquonk 的评论。他们帮我找对了地方。

于 2011-04-19T20:40:30.877 回答
0

请在此处查看我对这个问题的回答为 Android 开发流媒体服务器,它基本上描述了简单地使用 IIS 作为服务器来使用 Android 上的 AsyncPlayer 来“打开”(并逐步流式传输)mp3 文件(MediaPlayer 也是如此)。

另请参阅我对此处问题的回答如何在 C# 桌面应用程序和移动 (android) 设备之间通过本地网络进行通信?它描述了一个用 C# 编写的简单 HTTPListener“服务”。它可用于多种用途,并可用于打开 MediaPlayer 可以逐步流式传输的 mp3 文件。

只是 WCF 的一些替代想法。

于 2011-04-18T22:16:36.257 回答