Il motivo è il limite per la quantità di connessioni http che viene ignorata quando si utilizza Fiddler.
Ho riscontrato lo stesso comportamento durante l'utilizzo di System.Net.Http.HttpClient
per eseguire più richieste simultanee (~ 80). Con Fiddler in esecuzione, tutte le richieste si stavano completando molto più velocemente. Keep-alive è stato sicuramente abilitato.
Ho usato Wireshark per vedere cosa sta succedendo e per prima cosa ho notato che la modalità del traffico http era diversa. Con le richieste di Fiddler sono state lanciate tutte in una volta e dopo che le risposte sono seguite bene anche in gruppo. Senza Fiddler le richieste erano intercalate da risposte.
In secondo luogo, tcpview ha mostrato che il mio codice senza Fiddler ha creato solo 2 connessioni TCP sul server. Con Fiddler avviato, il numero di connessioni è aumentato drasticamente. Ce n'erano decine dalla mia app a Fiddler e poi da Fiddler al server.
È noto che lo standard http raccomanda che il numero di connessioni http non sia superiore a 2 e che il limite sia implementato come impostazione predefinita nei client http.
Nelle applicazioni .NET è possibile controllare il limite con la proprietà statica ServicePointManager.DefaultConnectionLimit
. Come esperimento, avendolo impostato su 100, le richieste eseguivano la stessa velocità con o senza Fiddler.
L'impostazione può anche essere controllato attraverso app.config:
<system.net>
<connectionManagement>
<add address="*" maxconnection="100" />
</connectionManagement>
</system.net>
Ora, perché è il limite di connessione predefinita non rispettato durante l'utilizzo di Fiddler? Risulta che il limite è diverso quando un client http utilizza un proxy e Fiddler agisce come un proxy. Non ho trovato molte informazioni sul limite di connessione proxy oltre a this old article.
fonte
2014-05-21 17:16:06
Nel mio programma quando creo una connessione e scarico il contenuto, chiuderò la risposta e interromperò la richiesta in finale, ma mi chiedo che questo sia lo stesso codice che è in esecuzione con il violinista in background e il suo veloce. il Fiddler cambia la mia richiesta e usa la stessa connessione per ogni richiesta? – Ehsan
@Eshan _ "Fiddler modifica la mia richiesta e usa la stessa connessione per ogni richiesta?" _ Sì. – CodeCaster
quindi, come posso utilizzare questa funzione nel mio programma con HttpWebRequest? – Ehsan