2016-01-19 30 views
13

strana situazione che ho qui e purtroppo non capisco molto della parte di rete di Windows di cose al di fuori di netstat:HttpWebRequests utilizzando lavoro WebProxy e poi non dopo il tempo

Così ho un proxy che ho configurato nel mio browser (Firefox 42) e sto eseguendo una semplice applicazione che scorre attraverso gli URL per chiamarli tramite quel proxy. Questo proxy ha le credenziali per usarlo e so che il proxy funziona. Questa è una scatola di Windows 7.

Così ad un certo punto durante questo processo, accade quanto segue:

  1. Browser chiama appena time out. Non richiede affatto le credenziali. (quando il problema scompare, inizia a chiedere di nuovo le credenziali).
  2. chiede nel timeout applicazione non importa quale sia il timeout è (7 secondi, 20 secondi, ecc)

Ho confermato quanto segue:

  1. Nella mia applicazione .net, I 100 % so che sto chiudendo ogni oggetto di rete e sono anche stato interrotto l'oggetto richiesta dopo aver letto la risposta .
  2. Dopo un certo periodo di tempo, senza chiamate, il problema scompare.
  3. Quando si utilizza questo proxy su un altro server, è il 100% . Quindi so che è correlato al server che sto usando e quell'indirizzo IP del proxy .
  4. Ho esaminato il gestore risorse e non sono aperte molte connessioni TCP attive. Anche se non so se questo significa qualcosa.
  5. Se utilizzo un altro proxy, tale proxy funziona. È come se fosse specifico per l'IP, il che mi sconcerta perché è solo un oggetto proxy web nel codice.

Cosa potrebbe causare questo? Accade solitamente dopo 4-7 chiamate con il proxy e rilascia il problema dopo 30-40 minuti.

Edit 7:

accade anche con le istanze AWS. Ho provato questo approccio. zzz ...

Edit 6:

non va via con un riavvio del server sia. È possibile riavviare e 15 minuti dopo il timeout del proxy SAME. Alla fine funziona di nuovo.

Edit 5:

Ha scritto un test simile con Java e Python. Stesso risultato

Edit 4: Questo è come funziona:

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: queste domande sembra essere molto simile: 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

Edit 2: Guardando Wireshark, sto vedendo una trasmissione TCP nelle informazioni per il proxy colpite. Ma questo non succede con altri proxy allo stesso tempo? Quindi viene dal server proxy stesso? Non ha senso per me dal momento che non riesco nemmeno a ottenere una risposta e la richiesta non viene nemmeno elaborata.

Modifica: Aggiunta di codice per le chiamate nel codice. Questo metodo viene chiamato in un ciclo while più e più volte:

  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

Un numero di cose potrebbe accadere. Potresti avere una collisione sulla tua rete o un interruttore difettoso in modo che il pacchetto non raggiunga mai il proxy o piuttosto qualsiasi problema sulla strada verso l'host con cui stai parlando. Mi piacerebbe sapere qual è l'eccezione effettiva che si ottiene. Ed eccezioni interiori se ne hai. In secondo luogo se è possibile catturare una richiesta non riuscita in wireshark che direbbe cosa sta succedendo. – fhogberg

+0

Quindi ignorando il tuo codice, quando imposti il ​​tuo browser effettivo per usare questo proxy, è ancora in timeout? Stai scrivendo il codice per questo proxy e stai cercando di capire perché sta avendo problemi? Sembra un problema con il codice nel server proxy che non gestisce correttamente le risorse di rete. –

+0

Sì, ho impostato il proxy nel browser ENTRAMBI sul server in cui è in esecuzione il codice (che risulta anche in un timeout) e su un altro server esterno alla rete (che risulta in una chiamata riuscita). – user2124871

risposta

1

Dopo molte scavo - Sono tornato al provider di proxy di nuovo con una serie di informazioni di traccia e dei risultati di scavo e ... miracolosamente ... loro Ho deciso che in realtà hanno dei limiti che non hanno rivelato all'acquirente.

Shocker. Sono più seccato di essermi spinto così lontano dopo aver inizialmente discusso con loro e ottenere una bolletta pulita per la loro salute.

Se qualcuno ha bisogno di un consiglio per un provider da non utilizzare :)