2011-04-18 73 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的一些替代想法。