2009-06-23 7 views
16

Je reçois une erreur étrange. J'ai mis en place un script qui fonctionne parfaitement lorsque Fiddler est ouvert - il télécharge un rapport depuis un site web en utilisant httpwebrequest et tout fonctionne bien!Httpwebreqest fonctionne avec Fiddler Sur sinon Timeout

CEPENDANT cela fonctionne seulement quand Fiddler est ouvert? Quand fiddler ne fonctionne pas, je reçois un "Request Timeout Issue"

Est-ce que quelqu'un sait comment résoudre ce problème et le faire fonctionner avec mon application ASP.NET MVC?

Merci

Edit: Merci pour la réponse! Concernant proxy - Je voulais tester ce script sur Windows Azure - si peu confus quant à la façon de configurer les paramètres de proxy par défaut? Sachez que Fiddler agit comme un proxy.

+1

J'ai entendu quelques personnes disent qu'ils rencontrent des problèmes comme this-- essentiellement Fiddler * augmente * les performances de téléchargement par rapport à certaines configurations client courantes. En règle générale, à moins de pouvoir régler le logiciel client (par exemple, en changeant la taille des tampons de téléchargement), il est préférable d'augmenter le délai d'attente sur le serveur pour permettre une période plus longue avant le téléchargement. En ce qui concerne * pourquoi * Fiddler aide dans ce scénario, Fiddler met les requêtes en mémoire tampon par défaut, donc votre application envoie la requête complète à Fiddler, qui la collecte, THEN établit une connexion au serveur et envoie les données au serveur rapide comme possible. – EricLaw

Répondre

2

Avoir une application fonctionne lorsque Fiddler est en cours d'exécution mais pas autrement pourrait indiquer un problème avec votre configuration de proxy par défaut. Ouvrez les Options Internet (éventuellement via IE) et vérifiez vos paramètres de proxy. En particulier, notez si vous configurez via un script.

Je mentionnerai une possibilité très improbable, même si cela m'est réellement arrivé. J'ai installé un certain antivirus sur ma machine. Pour une raison quelconque, il pensait que mon abonnement avait expiré. Le résultat était que le logiciel ne fonctionnerait pas, et ne pouvait donc pas mettre à jour la liste des programmes autorisés à accéder à Internet. Les programmes que j'ai installés après l'expiration ne fonctionneraient pas à moins que Fiddler ne soit en cours d'exécution (puisque Fiddler a été installé avant l'expiration, c'était sur la liste "Bon"). Tout autre programme installé après l'expiration était sur la liste "Bad" (par défaut).

+0

Merci pour la réponse! Concernant proxy - Je voulais tester ce script sur Windows Azure - si peu confus quant à la façon de configurer les paramètres de proxy par défaut? –

+0

L'avez-vous déjà sur votre système Windows normal? Faites-le avant de vous occuper d'Azure. –

1

Courez-vous avec HTTPS? Si tel est le cas, votre code peut ne pas approuver le certificat du site distant et Fiddler peut transmettre les données à votre application. Envoyez-nous le message d'erreur et une quantité minimale de code qui réplique ce problème.

+0

Salut Dave, oui - en cours d'exécution avec HTTPS. Je ne suis pas à mon PC où le code est bien (au travail) des idées (si c'est le cas) comment résoudre ce problème? –

+0

Jetez un coup d'oeil à http://msdn.microsoft.com/en-us/library/system.net.servicepointmanager.servercertificatevalidationcallback.aspx. Vous devrez probablement indiquer à votre code d'accepter le certificat du site auquel vous parlez. –

+0

Fiddler affichera une boîte de dialogue d'avertissement modal si le site présente le mauvais certificat, donc je ne pense pas que c'est ce que cet utilisateur rencontre. – EricLaw

11

Pour les chercheurs, voici une autre idée. J'ai une application qui manipule mon site Web d'une manière robotique. L'application utilise HttpWebRequest et HttpWebResponse dans .Net 4.0. Après deux ou trois GET réussis, le suivant se verrouillait systématiquement. Un autre article suggérait que la fermeture incorrecte d'un HINTERNET pouvait empêcher une application de bloquer un GET ultérieur sur le même hôte en raison d'une limitation du nombre de connexions parallèles au même hôte. Je ne sais pas si c'est ce qui se passait sous les couvertures, mais je pensais que je reviendrais et déterminerais où je pourrais fermer les choses.

J'ai fermé tous mes objets HttpWebResponse dans le code et mon problème est parti. De cela, je ne vois pas pourquoi Fiddler masquerait le problème, mais c'était le cas. Avant d'ajouter les fermetures, une demande spécifique dans la séquence expirera systématiquement. Après la fermeture des réponses, tout s'est éclairci et je pouvais courir sans passer par Fiddler.

+0

Oui c'était mon problème. Si simple, il échouait systématiquement après 2 demandes. Merci Prof! –

+0

Je peux également confirmer - une réponse simple.Fermer(); fixé mon problème. – Anders

+0

Je voudrais également ajouter mes remerciements pour ce post (4 ans plus tard!), Car cela s'applique également aux objets Powershell3 et System.Net.WebRequest qui ne sont pas nettoyés lorsqu'ils sortent du cadre; J'ai donc dû ajouter un appel à [System.Net.WebRequest] .abort() avant de sortir de la portée et dans tous les blocs try/catch. – JonnyG

3

La fermeture de tous les objets HttpWebRequest comme @ProfVonLemongargle suggérait de résoudre le même problème que celui que j'avais.

Fiddler ferme probablement les connexions au serveur afin que la limitation de connexion simultanée soit masquée lorsque votre application l'utilise comme proxy. Voir ce fil pour plus d'informations: HttpWebRequest times out on second call

1

ancienne chaîne, mais j'ai découvert le même problème dans notre code. C'était parce qu'il y avait des commandes console.log restantes dans le javascript. Cela a conduit à bloquer le code javascript.

0

J'avais le même problème sur un réseau d'entreprise, j'ai ouvert Fiddler2 pour diagnostiquer ce qui était envoyé/reçu et le problème est parti! Après d'autres recherches, j'ai trouvé que les tunnels Fiddler trafiquent comme un proxy et mon réseau d'entreprise utilise également un script de configuration automatique pour un proxy (je suppose que Fiddler l'a fait passer par le proxy système approprié dont mon appli ne connaissait pas)

pour obtenir mon programme en cours d'exécution VB.net tout ce que je devais faire était d'ajouter les paramètres de proxy à la demande:

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