Потоковая передача на низком битрейте с использованием сервиса RESTful WCF - PullRequest
1 голос
/ 18 февраля 2011

Я хочу непрерывно передавать данные с очень низкой скоростью передачи битов : несколько байтов в секунду.

Моя служба REST WCF работает нормально, когда я передаю большой объем данных.Но когда битрейт низкий, кажется, что поток буферизуется до тех пор, пока не будет достаточно данных для передачи на транспортный уровень.

В результате я получаю 16Ко данных каждые 16 секунд вместо 1Ко каждую секунду.

Как реализовать потоковую передачу с низким битрейтом в WCF REST?

Мой сервис WCF:

void StartMyWCFService()
{ 
    host = new WebServiceHost(typeof(IServ), new Uri("http://localhost:4530/");
    var bnd = new WebHttpBinding();
    bnd.TransferMode = TransferMode.Streamed;
    host.AddServiceEndpoint(typeof(IServ), bnd, "");
    host.Open();
}


[ServiceContract]
public interface IServ
{
    [OperationContract, WebGet(UriTemplate = "/")]
    Stream MyStream();
}

[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single)]
class Serv : IServ
{
    public Stream MyStream()
    {
        var resp = WebOperationContext.Current.OutgoingResponse;
        resp.StatusCode = System.Net.HttpStatusCode.OK;
        return _new MyStream();
    }
}

class MyStream : Stream
{
    public override int Read(byte[] buffer, int offset, int count)
    {
        // returns a few bytes every second
    }
    [...]
}

Редактировать :Я заметил 16Ко жестко закодированный размер буфера глубоко внутри .net Framework (v4) в: System.ServiceModel.dll#System.ServiceModel.Channels.HttpOutput.WriteStreamedMessage()

Спасибо

Ответы [ 2 ]

1 голос
/ 18 февраля 2011

Вы можете обойти буферизацию, возвращая IEnumerable из байтовых массивов вместо потока и отправляя байт [1024] или меньше каждый раз.

0 голосов
/ 19 августа 2011

Я получил ответ от MS. Поток отправляется 16ko / 32ko chrunk. Такое поведение "по замыслу".

Дополнительная информация: http://social.msdn.microsoft.com/Forums/en/wcf/thread/0662dc2e-6468-47c5-9676-fa14a56121cb

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...