wcf渐进式下载

时间:2011-04-18 19:48:56

标签: android wcf progressive-download

我正在尝试编写可以将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。感谢您的帮助。

Android代码:

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

播放器是MediaPlayer对象。我正在将数据源设置为路径中的URL。

2 个答案:

答案 0 :(得分: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的评论。他们帮助我找到了合适的地方。

答案 1 :(得分:0)

在这里查看我对这个问题的回答Developing A Streaming Server For Android基本上描述了使用IIS作为服务器在Android上使用AsyncPlayer“打开”(并逐步传输)mp3文件(同样适用于MediaPlayer)。

另请参阅我对How to communicate over local network between C# desktop application and mobile (android) device?中问题的回答,其中描述了一个用C#编写的简单HTTPListener“服务”。它可以用于各种各样的事情,并可以适应打开一个MP3文件,MediaPlayer可以逐步传输。

WCF的其他一些想法。