我正在尝试编写一个可以将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.
最佳答案 所以我弄清楚出了什么问题. 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的评论.他们帮助我找到了合适的地方.