Używam System.Net.Http.HttpClient
do wysyłania sekwencji żądań z aplikacji konsoli do REST API i do deserializacji odpowiedzi JSON na obiekty o silnym typie. Moja implementacja jest tak:.NET HttpClient zawiesza się po kilku żądaniach (chyba, że Skrzypek jest aktywny)
using (var client = new HttpClient())
{
var content = new StringContent(data, Encoding.UTF8, "text/html");
var response = client.PostAsync(url, content).Result;
response.EnsureSuccessStatusCode();
return response.Content.ReadAsAsync<MyClass>().Result;
}
Jestem jednak występuje problem bardzo podobny do opisanego w this question, przy czym wszystko działa dobrze, gdy wnioski są kierowane poprzez Skrzypek, ale zawiesza się po 4 lub 5 żądanie podczas Fiddler jest wyłączony.
Jeśli przyczyna problemu jest taka sama, zakładam, że muszę zrobić coś więcej dzięki HttpClient
, aby uzyskać pełne zwolnienie zasobów po każdym żądaniu, ale nie mogę znaleźć żadnych próbek kodu, które pokazują, jak to zrobić .
Mam nadzieję, że ktoś wskaże mi właściwy kierunek.
Dziękujemy,
Tim
Dziękuję Andrzej - to był ratownik. W rzeczywistości widziałem ten problem przed użyciem HttpWebRequest, a rozwiązanie było takie samo, ale nie było od razu oczywiste, jak to zrobić z wzorcem kodu HttpClient. Dzięki jeszcze raz. –
Coś tu się dzieje. Jedynym strumieniem jest tutaj strumień NetworkStream, który jest przekazywany do obiektu StreamContent, który jest przypisany do właściwości Content komunikatu odpowiedzi. Kiedy HttpClient jest używany w ten sposób, treść odpowiedzi jest automatycznie buforowana, a każdy nieczytelny strumień zostanie automatycznie usunięty, gdy zostanie zbuforowany. Nie ma potrzeby umieszczania wiadomości HttpResponseMessage, która jest pobierana przez HttpClient przy użyciu HttpCompletionOption.ResponseContentRead. –