Как настроить правильный объект HTTP Response для запроса Range, поступающего от BITS (Background Intelligent Transfer Service)? - PullRequest
0 голосов
/ 23 сентября 2011

У меня есть требование реализовать веб-сервис, который может выдавать файлы в биты (Background Intelligent Transfer Service).Язык ASP.NET (C #).Проблема, с которой я сталкиваюсь, связана с «диапазоном».

Мой код в настоящее время получает запрос http (с допустимым диапазоном в заголовках http от 0 до 4907), а затем выделяет частьбайтовый массив в объекте ответа.

Вот мой код сервера:

_context.Response.Clear();
_context.Response.AddHeader("Content-Range", "bytes " + lower.ToString() + "-" +  upper.ToString() + "//" + view.Content.Length.ToString());
_context.Response.AddHeader("Content-Length", upper.ToString());
_context.Response.AddHeader("Accept-Ranges", "bytes");
_context.Response.ContentType = "application/octet-stream";
_context.Response.BinaryWrite(data);
_context.Response.End();

Что происходит дальше, так это то, что в последующем запросе вообще нет никакого ключа "диапазона" в заголовке ... он как бы запрашиваетвесь файл!Само собой разумеется, ошибки задания битов, утверждающие, что ответ сервера был недействительным.

Я подозреваю, что все зависит от заголовков, которые сервер возвращает в объекте ответа ... Я почти уверен, что яЯ следую протоколу здесь.

Если кто-то может помочь с этим, это будет очень ценно ... в то время как ... Я продолжу поиск!

С уважением

Ответы [ 2 ]

1 голос
/ 26 сентября 2011

Да, я обнаружил, что у меня всего несколько проблем.Первоначальной проблемой была IIS, затем мои расчеты длины ... и затем, как вы говорите, запрос диапазона - это сам.Игнорируя последнее, мой окончательный код для этого сегмента был:

_context.Response.StatusCode = 206;
_context.Response.AddHeader("Content-Range", string.Format("bytes {0}-{1}/{2}", lower.ToString(), upper.ToString(), view.Content.Length.ToString()));
_context.Response.AddHeader("Content-Length", length.ToString());
_context.Response.AddHeader("Accept-Ranges", "bytes");
_context.Response.OutputStream.Write(view.Content.ToArray(), lower, length);

Обработка диапазонов нескольких запросов может быть решена в другой день!Если BITS запрашивает таким образом (как это происходит во втором запросе после первого запроса, который запрашивает весь файл), мой код просто ничего не возвращает ... и затем BITS отправляет один диапазон в запросе ... все работает нормальнооттуда.

Спасибо за ответ.

0 голосов
/ 15 марта 2012

Вы также можете протестировать ваши запросы BITS для известного статического файла и прослушать пакеты с помощью WireShark. Это точно покажет, как именно это сделать.

...