Pytanie Trwałe połączenie HTTP z RestSharp


Używam RestSharp do korzystania z usługi sieciowej REST i będę wykonywać dużą liczbę połączeń w krótkim czasie.

Dokumentacja API zdecydowanie zaleca użycie trwałych połączeń HTTP, aby to zrobić, jednak staram się, aby to działało z RestSharp.

Próbowałem dodać nagłówek "Connection: Keep-alive" do żądania, ale kiedy to zrobię, żądanie nie powiedzie się z następującym błędem - "Keep-Alive and Close nie może być ustawiona za pomocą tej właściwości."

Czy nie mogę użyć tego nagłówka z RestSharp, czy jest coś jeszcze, co muszę zrobić, aby to włączyć?

Czy ktoś może pomóc? Dzięki.


12
2018-06-11 09:57


pochodzenie


Opublikuj część swojego kodu (aby pokazać, jak korzystasz z RestSharp). Używałem RestSharp całkiem sporo i nigdy nie miałem problemu z zamykaniem połączeń przedwcześnie. - EkoostikMartin
Używam tylko standardowego kodu połączenia RestSharp, z ogólną metodą Execute <T>. Aby dodać nagłówek keep-alive, po prostu próbuję request.AddHeader ("Connection", "Keep-Alive"); ale to się nie udaje, jak opisano powyżej. - Adam Cobb
Jak rozwiązać ten problem? mam ten sam problem - hellboy


Odpowiedzi:


Aby uzyskać dobrą odpowiedź, musisz zadać dobre pytanie. Gdzie w dokumentacji mówi to? (Link / Referencje?) Ile żądań to "duży wolumen"? Ponadto, jeśli opublikujesz swój kod, w jaki sposób dodałeś Connection: Keep-Alive do nagłówków http, ktoś tutaj może być w stanie skomentować twoją technikę i pomóc ci w konkretnym problemie programowania.

Również, Connection: Keep-Alive może już być obecny na wychodzących żądaniach Http! Sprawdź to za pomocą Skrzypek lub WireShark. Widziałem kilka blogów z wireshark przechwytuje RestSharp wniosków, które miał Connection: Keep-Alive Prezentacja nagłówka bez dodatkowej konfiguracji. Na przykład, podczas testowania innych funkcji mvc3 przy użyciu RestSharp jako konsumenta, Jimmy Bogard rejestruje swoje prośby RestSharp o skrzypek, które już mają Connection: Keep-Alive nagłówek.

Wygląda na to, że jest to domyślne zachowanie wbudowanych klas .Net, takich jak System.Net.Webclient używać Connection: Keep-Alive. Odniesienie Czy WebClient używa KeepAlive?

Sądzę, że korzystanie z funkcji "keep alive" będzie bardziej dotyczyło kodu przy użyciu RestSharp w optymalny sposób, niż w przypadku samego RestSharp. Jeśli chcesz się upewnić, że twoje połączenie jest ponownie używane, upewnij się, że pozwala ci na to RestSharp, utrzymując jedną instancję RestClient w zasięgu i wykorzystując ją w wielu żądaniach skierowanych przeciwko temu samemu hostowi.

Ponownie za pomocą Skrzypek lub WireShark pomoże ci uchwycić niektóre HttpRequests do analizy.


6
2018-06-19 05:15