2016-01-19 20 views
13

Odd sytuacji mam tutaj i niestety nie rozumiem dużo o stronie sieciowej Windows rzeczy poza netstat:HttpWebRequests użyciu WebProxy pracę, a następnie nie po raz

więc mam proxy, że mam skonfigurowanego w mojej przeglądarce (Firefox 42) i uruchamiam prostą aplikację, która wykonuje pętle za pośrednictwem adresów URL, aby wywołać je za pośrednictwem tego serwera proxy. Ten serwer proxy ma poświadczenia, aby z niego korzystać i wiem, że proxy działa. To jest Windows 7 box.

Więc w pewnym momencie w trakcie tego procesu, dodaje się dzieje:

  1. Przeglądarka nazywa się tylko raz. W ogóle nie wymaga danych uwierzytelniających. (gdy problem zniknie, ponownie zaczyna się pytać o dane uwierzytelniające).
  2. wzywa w timeout aplikacji bez względu na timeout (7 sekund, 20 sekund, etc)

Mam potwierdzone następujące:

  1. W mojej aplikacji .net, I 100 % wiem, że zamykam każdy obiekt sieciowy i nawet przerwałam obiekt żądania po przeczytaniu odpowiedzi .
  2. Po upływie pewnego czasu, bez żadnych połączeń, problem znika w postaci .
  3. Gdy używam tego serwera proxy na innym serwerze, to działa 100%. Tak więc wiem, że jest to związane z serwerem, którego używam i tym adresem IP proxy proxy.
  4. Sprawdziłem menedżera zasobów i nie ma otwartych zbyt wielu aktywnych połączeń TCP. Chociaż nie wiem, czy to coś znaczy.
  5. Jeśli używam innego proxy, TO działa proxy. To jest jak specyficzne dla IP, co jest dla mnie kłopotliwe, ponieważ jest to po prostu obiekt proxy sieci w kodzie.

Co by to spowodowało? Zwykle dzieje się to po 4-7 połączeniach z serwerem proxy i powoduje emisję po 30-40 minutach.

Edycja 7:

zdarza się również z przypadkami AWS. Próbowałem tego podejścia. zzz ...

Edycja 6:

nie znika z restartu serwera, albo. Możesz zrestartować i 15 minut później SAME proxy przekroczy limit czasu. W końcu znowu działa.

Edit 5:

Wrote podobny test z Java i Python. Ten sam wynik.

Edycja 4: Jak to działa:

Call to Proxy 1... Good! 
Call to Proxy 2... Good! 
Call to Proxy 3... Good! 
Call to Proxy 4... Good! 
Call to Proxy 1... Good! 
Call to Proxy 2... Good! 
Call to Proxy 3... Good! 
Call to Proxy 4... Good! 
Call to Proxy 1... Timeout... 
Call to Proxy 2... Good! 
Call to Proxy 3... Good! 
Call to Proxy 4... Good! 
Call to Proxy 1... Timeout... 
Call to Proxy 2... Good! 
Call to Proxy 3... Good! 
Call to Proxy 4... Good! 
Call to Proxy 1... Timeout... 
Call to Proxy 2... Good! 
Call to Proxy 3... Good! 
Call to Proxy 4... Good! 
Call to Proxy 1... Timeout... 
Call to Proxy 2... Good! 
Call to Proxy 3... Good! 
Call to Proxy 4... Good! 
Call to Proxy 1... Timeout... 
Call to Proxy 2... Good! 
Call to Proxy 3... Good! 
Call to Proxy 4... Good! 
Call to Proxy 1... Timeout... 
Call to Proxy 2... Good! 
Call to Proxy 3... Good! 
Call to Proxy 4... Good! 
Call to Proxy 1... Timeout... 
Call to Proxy 2... Good! 
Call to Proxy 3... Good! 
Call to Proxy 4... Good! 
Call to Proxy 1... Timeout... 
Call to Proxy 2... Good! 
Call to Proxy 3... Good! 
Call to Proxy 4... Good! 
Call to Proxy 1... Timeout... 
Call to Proxy 2... Good! 
Call to Proxy 3... Good! 
Call to Proxy 4... Good! 
Call to Proxy 1... Timeout... 
Call to Proxy 2... Good! 
Call to Proxy 3... Good! 
Call to Proxy 4... Good! 
Call to Proxy 1... Good! 
Call to Proxy 2... Good! 
Call to Proxy 3... Good! 
Call to Proxy 4... Good! 

Edit 3: te pytania wydaje się być bardzo podobna: Http Post WebRequest getting timed out

HttpWebRequest and GetResponse hangs after 1 request; other solutions doesn't work for me

WebRequest.GetResponse locks up?

HttpWebRequest times out on second call

Edycja 2: Patrząc na Wiresharka, widzę transmisję TCP w informacji o zagrożonym serwerze proxy. Ale czy nie dzieje się tak z innymi serwerami proxy w tym samym czasie? Czy to samo pochodzi od samego serwera proxy? Nie ma to dla mnie sensu, ponieważ nie otrzymuję nawet odpowiedzi i prośba nie jest nawet przetwarzana.

Edytuj: Dodawanie kodu dla połączeń w kodzie. Metoda ta nazywana jest w pętli while w kółko:

  String html = null; 

     HttpWebRequest request = null; 
     WebProxy webProxy = null; 

     try 
     { 
      request = (HttpWebRequest)WebRequest.Create(url); 

      webProxy = new WebProxy(proxyIP, proxyPort); 
      webProxy.Credentials = new NetworkCredential(proxyUser, proxyPass); 

      request.Proxy = webProxy; 
      request.KeepAlive = false; 
      request.Timeout = 5000; 
      request.ReadWriteTimeout = 5000; 
      request.Method = "GET"; 
      request.UserAgent = generateAgentString(); 

      using (WebResponse resp = (WebResponse)request.GetResponse()) 
      { 
       using (Stream strm = resp.GetResponseStream()) 
       { 
        StreamReader reader = new StreamReader(strm, Encoding.UTF8); 

        try 
        { 
         html = reader.ReadToEnd(); 
        } 
        catch 
        { 
         Console.WriteLine("Failed"); 
         html = null; 
        } 
        finally 
        { 
         strm.Flush(); 
         reader.BaseStream.Dispose(); 
         reader.Dispose(); 
         strm.Dispose(); 
         resp.Dispose(); 
        } 
       } 
      } 

      if (request != null) 
      { 
       request.Abort(); 
      } 
     } 
     catch(Exception e) { Console.WriteLine(e); } 
+0

Może się zdarzyć wiele rzeczy. Możesz mieć kolizje w swojej sieci lub wadliwy przełącznik, aby pakiet nigdy nie dotarł do serwera proxy lub raczej żadnego problemu w drodze do hosta, z którym rozmawiasz. Chciałbym wiedzieć, jaki jest faktyczny wyjątek. I wewnętrzne wyjątki, jeśli je masz. Po drugie, jeśli uda się przechwycić nieudane żądanie w wireshark, które wskazywałoby, co się dzieje. – fhogberg

+0

Więc ignorując kod, konfigurując rzeczywistą przeglądarkę do korzystania z tego serwera proxy, czasami okazjonalnie nie działa? Czy piszesz kod dla tego serwera proxy i próbujesz ustalić, dlaczego występują problemy? To brzmi jak problem z kodem na serwerze proxy, który nie zarządza zasobami sieciowymi prawidłowo. –

+0

Tak, skonfigurowałem serwer proxy w przeglądarce OBU na serwerze, na którym działa kod (co powoduje również przekroczenie limitu czasu) i na innym serwerze poza siecią (co skutkuje pomyślnym wywołaniem). – user2124871

Odpowiedz

1

Po wielu kopania - Wróciłem do dostawcy proxy ponownie z wieloma informacjami i kopanie śledzenia wyników i ... cudownie ... oni stwierdzili, że faktycznie mają ograniczenia, których nie ujawnili nabywcy.

Shocker. Jestem bardziej zirytowany, że posunąłem się tak daleko, po tym jak początkowo rozmawiałem z nimi i otrzymałem czysty rachunek za zdrowie.

Jeśli ktoś potrzebuje zalecenia, aby dostawca nie używał :)