2011-04-18 49 views
4

我想写一个WCF服务,可以发送mp3文件到客户端。我需要它使用渐进式下载传输MP3文件,因为客户端是一个Android应用程序,我希望它尽快开始播放。我如何使用WCF进行渐进式下载?可能吗?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,我的Google搜索功能没有太大的提升。感谢你的帮助。

的Android代码:

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

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

+0

@nithin:你的Android应用程序如何尝试访问mp3文件?你使用什么代码? – Squonk 2011-04-18 19:53:38

+0

@MisterSquonk我认为android客户端正常运行。查看更新后的问题中的代码。 – Nithin 2011-04-18 20:07:29

+2

@nithin:好的,为什么你的'service'结尾是用WCF编写的吗?你想要的效果可以通过一个简单的HTTP服务来实现。 – Squonk 2011-04-18 20:29:19

回答

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的评论。他们帮助我在正确的地方寻找。

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“服务”。它可以用于各种各样的事情,并可以适应打开MediaPlayer可以逐步流式传输的mp3文件。

只是WCF的一些替代想法。