С# WebStream пытается загрузить файл по частям

Я пытаюсь сделать небольшую программу для загрузки файлов через HTTP на С#. Базовая загрузка с помощью WebClient работает нормально, но теперь я хотел попробовать загрузить файл с несколькими подключениями. Уже:

HttpWebRequest HttpRequest = (HttpWebRequest)WebRequest.Create(url);
HttpWebResponse HttpResponse = (HttpWebResponse)HttpRequest.GetResponse();
Stream ResponseStream = HttpResponse.GetResponseStream();

FileStream FSChunk = new FileStream(destination, FileMode.OpenOrCreate, FileAccess.Write);

while ((BytesThisRead = ResponseStream.Read(Buffer, 0, (int)BytesPerRead)) != 0)
{
    FSChunk.Write(Buffer, 0, BytesThisRead);
    TotallyRead += BytesThisRead;
    if (TotalReadLength - TotallyRead < buffersize)
        BytesPerRead = TotalReadLength - TotallyRead;
}

Я могу загрузить файл, используя этот ResponseStream, также разделенный на 2 части, используя один ResponseStream. Моя проблема в том, что WebStreams не доступны для поиска, поэтому я не могу просто установить позицию для чтения. Как я могу загрузить один файл через HTTP одновременно, используя разные потоки (соединения, я думаю, что один поток не может использоваться несколькими участниками). Я прочитал здесь много статей и несколько часов гуглил, но не могу найти решение. Имеет ли кодирование фрагментированной передачи какое-либо отношение к этой теме?

С уважением, Дэймон


person NoMad    schedule 07.08.2011    source источник


Ответы (1)


вам нужно вызвать AddRange по запросу - это установит content range в http header, который сообщает серверу, какую часть файла вы запрашиваете.

см. http://msdn.microsoft.com/en-us/library/dd992108.aspx

person Yahia    schedule 07.08.2011
comment
работает отлично, большое спасибо! Я видел этот метод раньше (вчера, когда я начал с программы), но не знал, что с этим делать. Я потратил не менее 3 часов на поиск :/ - person NoMad; 07.08.2011
comment
стоит отметить, что метод AddRange недоступен (и вы не можете напрямую задать заголовок Range — это вызовет исключение) в некоторых версиях HttpWebRequest (PCL, например, это не поддерживает) - person Jordan; 21.01.2014