2009-06-23 14 views
16

Si verifica uno strano errore. Ho impostato uno script che funziona perfettamente quando Fiddler è aperto: scarica un report da un sito Web utilizzando httpwebrequest e tutto funziona correttamente!Httpwebreqest funziona con Fiddler In caso contrario Timeout

TUTTAVIA funziona solo quando Fiddler è aperto? Quando il violinista non funziona, ottengo solo un "Richiesta di timeout"

Qualcuno sa come risolvere questo problema e farlo funzionare con la mia app ASP.NET MVC?

Grazie

Edit: Grazie per la risposta! Per quanto riguarda il proxy, volevo testare questo script su Windows Azure, così poco confuso su come configurare le impostazioni proxy predefinite?

+1

ho sentito alcune persone riferiscono che incontrano problemi come questo-- fondamentalmente Fiddler * aumenta * le prestazioni di upload rispetto ad alcune configurazioni client comuni. In generale, a meno che non sia possibile ottimizzare il software client (ad esempio cambiando le dimensioni del buffer di caricamento) la soluzione migliore è aumentare il timeout sul server per consentire un periodo più lungo prima del caricamento. Per quanto riguarda * perché * Fiddler aiuta in questo scenario, buffer Fiddler richiede per impostazione predefinita, quindi l'applicazione invia la richiesta completa a Fiddler, che raccoglie tutto, THEN effettua una connessione al server e invia i dati al server come il più velocemente possibile – EricLaw

risposta

2

Si noti che Fiddler funge da proxy. Avere un'applicazione funziona quando Fiddler è in esecuzione ma non altrimenti potrebbe indicare un problema con la configurazione del proxy predefinito. Apri le Opzioni Internet (eventualmente tramite IE) e controlla le impostazioni del tuo proxy. In particolare, nota se stai configurando attraverso uno script.

Menzionerò una possibilità molto improbabile, anche se in realtà è successo a me. Ho installato un determinato prodotto antivirus sul mio computer. Per qualche ragione, pensava che il mio abbonamento fosse scaduto. Il risultato è stato che il software non sarebbe stato eseguito e pertanto non è stato possibile aggiornare l'elenco dei programmi autorizzati ad accedere a Internet. I programmi che ho installato dopo la scadenza non funzionavano a meno che Fiddler non fosse in esecuzione (dal momento che Fiddler è stato installato prima della scadenza, era nella lista "Buono"). Qualsiasi altro programma installato dopo la scadenza era nell'elenco "Bad" (per impostazione predefinita).

+0

Grazie per la risposta! Per quanto riguarda il proxy, volevo testare questo script su Windows Azure, così poco confuso su come configurare le impostazioni proxy predefinite? –

+0

Hai già installato il tuo normale sistema Windows? Fallo prima di preoccuparti di Azure. –

1

Stai utilizzando HTTPS? In tal caso, il tuo codice potrebbe non essere attendibile nel certificato del sito remoto e Fiddler potrebbe passare i dati nella tua app. Inviaci il messaggio di errore e una quantità minima di codice che replica questo problema.

+0

Ciao Dave, sì - in esecuzione con HTTPS. Non sono al mio PC in cui il codice è però (al lavoro) qualche idea (se questo è il caso) come risolvere questo problema? –

+0

Dai un'occhiata a http://msdn.microsoft.com/en-us/library/system.net.servicepointmanager.servercertificatevalidationcallback.aspx. Probabilmente dovrai dire al tuo codice di accettare il certificato del sito con cui stai parlando. –

+0

Fiddler mostrerà una finestra di dialogo di avviso modale se il sito presenta il certificato sbagliato, quindi non penso che questo sia ciò che questo utente sta incontrando. – EricLaw

11

Per i ricercatori, ecco un altro pensiero. Ho un'applicazione che manipola il mio sito web in modo robotico. L'applicazione utilizza HttpWebRequest e HttpWebResponse in .Net 4.0. Dopo due o 3 GET di successo, il prossimo si bloccherebbe in modo coerente. Un altro post suggeriva che non chiudere in modo appropriato un HINTERNET poteva far bloccare un'applicazione su un successivo GET allo stesso host a causa di un limite sul numero di connessioni parallele allo stesso host. Non so se questo è ciò che stava accadendo sotto le coperte, ma ho pensato di tornare indietro e determinare dove poter chiudere le cose.

Ho chiuso tutti i miei oggetti HttpWebResponse nel codice e il mio problema è andato via. Da questo non vedo perché Fiddler avrebbe mascherato il problema, ma lo ha fatto. Prima di aggiungere il closes, una richiesta specifica nella sequenza scade costantemente. Dopo aver chiuso le risposte, tutto si è risolto e ho potuto eseguire senza proxy tramite Fiddler.

+0

Sì, questo era il mio problema. Così semplice, stava fallendo in modo coerente dopo 2 richieste. Grazie Prof! –

+0

Posso confermare anche - una semplice risposta.Close(); risolto il mio problema – Anders

+0

Vorrei anche aggiungere i miei ringraziamenti per questo post (4 anni dopo!), In quanto ciò vale anche per Powershell3 e gli oggetti System.Net.WebRequest non vengono ripuliti quando escono dall'ambito di applicazione; quindi ho dovuto aggiungere una chiamata a [System.Net.WebRequest] .abort() prima di uscire dall'ambito e in tutti i blocchi try/catch. – JonnyG

3

La chiusura di tutti gli oggetti HttpWebRequest come @ProfVonLemongargle ha suggerito di risolvere lo stesso problema riscontrato.

Fiddler sta probabilmente chiudendo le connessioni al server in modo che la limitazione della connessione simultanea venga mascherata quando l'app lo utilizza come proxy. Vedere questa discussione per ulteriori informazioni: HttpWebRequest times out on second call

1

catena precedente, ma ho scoperto lo stesso problema nel nostro codice. Era perché c'erano comandi di console.log rimanenti nel javascript. Ciò ha portato al codice javascript bloccato.

0

Avendo lo stesso problema su una rete aziendale, ho aperto Fiddler2 per diagnosticare ciò che veniva inviato/ricevuto e il problema è andato via! Dopo ulteriori ricerche ho scoperto che il tunnel di Fiddler lo attraversa come un proxy e anche la mia rete aziendale utilizza uno script di configurazione automatico per un proxy (presumo che Fiddler lo stesse scavando attraverso il proxy di sistema corretto di cui la mia app non sapeva)

per ottenere il mio programma di VB.net in esecuzione tutto quello che dovevo fare era aggiungere le impostazioni proxy per la richiesta:

Dim proxy = WebRequest.GetSystemWebProxy() 
oRequest.Proxy = proxy 
Problemi correlati