Я хочу непрерывно передавать данные с очень низкой скоростью передачи битов : несколько байтов в секунду.
Моя служба 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()
Спасибо