Mam interfejs API oparty na HTTP, który potencjalnie muszę wywoływać wiele razy. Problem polega na tym, że nie mogę poprosić o zrobienie mniej niż około 20 sekund, chociaż ta sama prośba za pośrednictwem przeglądarki jest niemal natychmiastowa. Poniższy kod ilustruje sposób, w jaki zaimplementowałem go do tej pory.Jak wykonać szybkie żądanie WWW w języku C#
WebRequest r = HttpWebRequest.Create("https://example.com/http/command?param=blabla");
var response = r.GetResponse();
Jednym rozwiązaniem byłoby zrobić asynchroniczne żądanie, ale chciałbym wiedzieć, dlaczego to trwa tak długo, a jeśli mogę tego uniknąć. Próbowałem również używać klasy WebClient, ale podejrzewam, że używa wewnętrznie WebRequest.
Aktualizacja:
Running następujący kod trwało około 40 sekund w trybie zwolnienia (mierzona z stoper):
WebRequest g = HttpWebRequest.Create("http://www.google.com");
var response = g.GetResponse();
pracuję na uczelni, gdzie mogą być różne rzeczy konfiguracja sieci wpływająca na wydajność, ale bezpośrednie użycie przeglądarki pokazuje, że powinna ona być bliska chwili.
Aktualizacja 2:
wysłał kod na zdalnym komputerze i to działało dobrze więc należy stwierdzić, że kod .NET robi coś dodatkowego w stosunku do przeglądarki lub ma problemy rozstrzygnięcia przez adres sieć uniwersytecka (problemy z proxy czy coś takiego!).
W jaki sposób ustaliłeś, że jest to żądanie internetowe, które wymaga czasu? Zwykle nie mam żadnych problemów z wydajnością z klasą HttpWebRequest. Czy próbowałeś, aby aplikacja wykonywała kilka połączeń, a jeśli tak, czy wszystkie połączenia trwały tyle samo czasu? –
Czy dzieje się to ze wszystkimi adresami URL, takimi jak google.com? A co z korzystaniem z adresu URL innego niż ssl? – tbreffni
Tak, komentarze i sugestie Fredrika są dobre. Nie ma powodu, aby HttpWebRequest miał słabą wydajność w jakikolwiek sposób (nie mówiąc o * że * słaba) - w końcu używa tego samego protokołu co przeglądarka. – Noldorin