Я использую свой клиент, чтобы получить некоторую информацию об определенном файле, хранящемся в моем хранилище быстрых объектов, к которому можно получить доступ через REST Api. В Swift метод HEAD и url, ведущие к указанному объекту, возвращают метаданные (хеш, временная метка и т.д.), Содержащиеся в заголовках ответа HTML (не содержит содержания).
Мой код отлично работает, когда размер файла равен < 2 Гб. Я получаю HttpResponseMessage, и я могу проанализировать его для требуемых данных, но когда я запрашиваю файл > 2 ГБ, я получаю исключение: "Невозможно записать больше байтов в буфер, чем настроенный максимальный размер буфера: 2147483647".
Я понимаю, что свойство HttpClient MaxResponseContentBufferSize не может быть установлено в значение > 2 ГБ, но я не хочу получать его содержимое. Это какая-то ошибка или есть лучший способ решить эту проблему?
public HttpResponseMessage FileCheckResponse(string objectName)
{
//create url which will be appended to HttpClient (m_client)
string requestUrl = RequestUrlBuilder(m_containerName, objectName);
//create request message with Head method
HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Head, requestUrl);
//exception thrown here...
HttpResponseMessage response = m_client.SendAsync(request).Result;
return response;
}
При попытке выполнить одно и то же действие с помощью Dev HTTP Client (расширение Chrome) у меня нет проблем. Кажется, что заголовок Content-Length делает его неосуществимым. Вот результат от Dev HTTP Client:
Content-Length: 3900762112
Accept-Ranges: bytes
Last-Modified: Fri, 06 Sep 2013 16:24:30 GMT
Etag: da4392bdb5c90edf31c14d008570fb95
X-Timestamp: 1378484670.87557
Content-Type: application/octet-stream
Date: Tue, 10 Sep 2013 13:25:27 GMT
Connection: keep-alive
Буду рад за любые идеи! Спасибо вам
Решение
Во-первых - спасибо Даррел Миррел, который решил всю мою проблему дня за несколько секунд:) Мне просто нужно было отредактировать одну строку в коде, добавив HttpCompletitionOption, где получен ответ:
HttpResponseMessage response = m_client.SendAsync(request, HttpCompletionOption.ResponseHeadersRead).Result;
Опция ResponseHeaderRead сообщает клиенту завершить работу, как только Заголовки будут прочитаны без чтения содержимого сообщения.