Przekroczono limit wielkości bufora HttpClient

Korzystam z mojego klienta, aby uzyskać pewne informacje o pewnym pliku przechowywanym w mojej pamięci masowej Swift Object, do której można uzyskać dostęp poprzez REST Api. W Swift metoda HEAD i adres URL prowadzący do określonego obiektu zwracają metadane (skrót, znacznik czasu itp.) Zawarte w nagłówkach odpowiedzi HTML (NIE MA ZAWARTOŚCI).

Mój kod działa doskonale, gdy rozmiar pliku wynosi <2 GB. Dostaję HttpResponseMessage i jestem w stanie go przeanalizować pod kątem wymaganych danych, ale kiedy pytam o plik> 2 GB, otrzymuję wyjątek: „Nie można zapisać więcej bajtów w buforze niż skonfigurowany maksymalny rozmiar bufora: 2147483647”.

Rozumiem, że właściwości HttpClient MaxResponseContentBufferSize nie można ustawić na wartość> 2 GB, ale nie chcę otrzymywać jej zawartości. Czy to jakiś błąd, czy jest jakiś lepszy sposób na rozwiązanie tego problemu?

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;
    }

Podczas próby wykonania tej samej akcji za pomocą klienta Dev HTTP (rozszerzenie Chrome) nie mam problemu. Wydaje się, że nagłówek Content-Length czyni to niewykonalnym. Oto dane wyjściowe klienta Dev HTTP:

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

Będę zadowolony z wszelkich pomysłów! Dziękuję Ci

Rozwiązanie

Po pierwsze - dzięki Darrelowi Mirrelowi, który rozwiązał mój cały problem w ciągu kilku sekund :) Potrzebowałem tylko edytować jedną linię w kodzie, dodając HttpCompletitionOption, gdzie uzyskano odpowiedź:

HttpResponseMessage response = m_client.SendAsync(request, HttpCompletionOption.ResponseHeadersRead).Result;

Opcja ResponseHeaderRead mówi klientowi, aby zakończył działanie, gdy tylko nagłówki zostaną odczytane bez czytania treści wiadomości.

questionAnswers(1)

yourAnswerToTheQuestion