HttpWebRequest.GetRequestStream возвращаемый поток не отправляет данные сразу в. NET Core - PullRequest
0 голосов
/ 23 апреля 2020

Я пытаюсь отправить большие файлы через htpp и получить следующий код:

string filePath = "";
string url = "";
using (var fileStream = new FileStream(filePath, FileMode.Open))
{

    HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
    request.Method = "PUT";
    request.Timeout = int.MaxValue;
    request.AllowWriteStreamBuffering = false;
    request.ContentLength = fileStream.Length;
    request.ContentType = "video/*";
    using (Stream dataStream = request.GetRequestStream())
    {
        byte[] buffer = new byte[1024*1024];
        int bytesRead = 0;
        while ((bytesRead = fileStream.Read(buffer, 0, buffer.Length)) != 0)
        {
            dataStream.Write(buffer, 0, bytesRead);
        }
    }

    using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
    {
    }
}

Ожидаемое поведение заключается в том, что, как только я записываю данные в dataStream, он отправляет данные по сети. В приложении. NET Framework это именно тот случай. Я также где-то читал в документах, что так и должно быть. В приложении. NET Core это не тот случай, данные, похоже, полностью буферизуются, и отправка начинается не раньше, чем я вызываю request.GetResponse ().

В a. NET Базовое приложение Я вижу в отладчике, что возвращаемый поток - это RequestStream, и у меня было в Exception, где я видел MemoryStream. В приложении. NET Framework возвращаемый поток - это ConnectStream ...

Может кто-нибудь воспроизвести это? Или скажите мне, как я могу получить поток в ядре NET, который немедленно отправляет данные? Спасибо!

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