wcf прогрессивная загрузка - PullRequest
4 голосов
/ 18 апреля 2011

Я пытаюсь написать службу WCF, которая может отправлять mp3-файлы клиенту. Мне нужно, чтобы передать файл 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>

Если вы можете предоставить ссылки на источники о прогрессивной загрузке, это также будет полезно. Мой поиск в Google не очень-то полезен для прогрессивной загрузки + wcf. Ценю твою помощь.

Код Android:

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

проигрыватель является MediaPlayer объектом. Я устанавливаю источник данных для URL в пути.

Ответы [ 2 ]

2 голосов
/ 20 апреля 2011

так что я понял, что случилось. WCF делает прогрессивную загрузку. Я думал, что раздел конфигурации поведения был необходим, когда вы возвращаете потоки из вашего сервиса. Но для веб-привязки, чтобы сделать прогрессивную загрузку, она не должна быть установлена. Установка конфигурации привязки в streamedResponse включит chunking , и это не прогрессивная загрузка. Правильная конфигурация ниже.

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

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

Обратите внимание, что на конечной точке нет привязки конфигурации.

Спасибо @MisterSquonk за ваши комментарии. они помогли мне посмотреть в нужных местах.

0 голосов
/ 19 апреля 2011

См. Мой ответ на этот вопрос здесь Разработка потокового сервера для Android , который в основном описывает простое использование IIS в качестве сервера для «открытия» (и постепенной потоковой передачи) mp3-файлов с помощью AsyncPlayer на Android (тоже самое для MediaPlayer).

Также см. Мой ответ на вопрос здесь Как установить связь по локальной сети между настольным приложением C # и мобильным (android) устройством? , который описывает простую «службу» HTTPListener, написанную на C #. Он может использоваться для разных целей и может быть адаптирован для открытия mp3-файла, который MediaPlayer мог бы передавать постепенно.

Просто некоторые альтернативные идеи WCF.

...