2009-06-23 4 views
16

Ich bekomme einen seltsamen Fehler. Ich habe ein Skript eingerichtet, das perfekt funktioniert, wenn Fiddler geöffnet ist - es lädt einen Bericht von einer Website mit httpwebrequest herunter und alles funktioniert gut!Httpwebreqest arbeitet mit Fiddler On sonst Timeout

HOWEVER es funktioniert nur, wenn Fiddler geöffnet ist? Wenn fiddler nicht funktioniert, bekomme ich nur ein "Request Timeout Issue"

Kann jemand dieses Problem beheben und es mit meiner ASP.NET MVC App arbeiten lassen?

Dank

Edit: Danke für die Antwort! In Bezug auf Proxy - ich wollte dieses Skript auf Windows Azure testen - so wenig verwirrt, wie die Standard-Proxy-Einstellungen einrichten?

+1

ich ein paar Leute gehört haben, berichten, dass sie Themen wie this-- grundsätzlich Fiddler begegnen * erhöht * die Upload-Leistung gegenüber einigen gängigen Client-Konfigurationen. Im Allgemeinen ist es am besten, wenn Sie die Client-Software optimieren können (z. B. Ändern der Größe des Upload-Puffers), indem Sie das Zeitlimit auf dem Server erhöhen, um einen längeren Zeitraum vor dem Upload zu ermöglichen. Als * warum * Fiddler hilft in diesem Szenario, puffert Fiddler Anfragen standardmäßig, so sendet Ihre Anwendung die vollständige Anfrage an Fiddler, die alles sammelt, DANN eine Verbindung zum Server herstellt und die Daten zum Server sendet so schnell wie möglich. – EricLaw

Antwort

2

Beachten Sie, dass Fiddler als Proxy fungiert. Wenn eine Anwendung funktioniert, während Fiddler ausgeführt wird, aber nicht, könnte dies auf ein Problem mit der Standard-Proxy-Konfiguration hinweisen. Öffnen Sie Internetoptionen (möglicherweise über IE) und überprüfen Sie Ihre Proxyeinstellungen. Beachten Sie insbesondere, ob Sie über ein Skript konfigurieren.

Ich werde eine sehr unwahrscheinliche Möglichkeit erwähnen, obwohl es mir tatsächlich passiert ist. Ich hatte ein bestimmtes Anti-Virus-Produkt auf meinem Computer installiert. Aus irgendeinem Grund dachte es, dass mein Abonnement abgelaufen war. Das Ergebnis war, dass die Software nicht ausgeführt werden konnte und daher die Liste der Programme, die auf das Internet zugreifen dürfen, nicht aktualisiert werden konnte. Programme, die nach dem Ablauf installiert wurden, funktionierten nicht, wenn Fiddler nicht ausgeführt wurde (da Fiddler vor dem Ablauf installiert war, war es in der Liste "Gut"). Jedes andere Programm, das nach dem Ablauf installiert wurde, befand sich standardmäßig in der Liste "Schlecht".

+0

Danke für die Antwort! In Bezug auf Proxy - ich wollte dieses Skript auf Windows Azure testen - so wenig verwirrt, wie die Standard-Proxy-Einstellungen einrichten? –

+0

Haben Sie es schon auf Ihrem normalen Windows-System? Mach das, bevor du dich mit Azure beschäftigst. –

1

Laufen Sie mit HTTPS? Wenn dies der Fall ist, kann Ihr Code dem Zertifikat der Gegenstelle nicht vertrauen und Fiddler könnte die Daten an Ihre App weitergeben. Senden Sie uns die Fehlermeldung und eine minimale Menge an Code, der dieses Problem repliziert.

+0

Hallo Dave, yep - läuft mit HTTPS. Ich bin nicht an meinem PC, wo der Code ist (bei der Arbeit) irgendwelche Ideen (wenn dies der Fall ist), wie dieses Problem zu beheben? –

+0

Werfen Sie einen Blick auf http://msdn.microsoft.com/en-us/library/system.net.servicepointmanager.servercertificatevalidationcallback.aspx. Wahrscheinlich müssen Sie Ihrem Code mitteilen, dass er das Zertifikat der Website akzeptiert, mit der Sie sprechen. –

+0

Fiddler zeigt ein modales Warndialogfeld an, wenn die Site das falsche Zertifikat vorlegt, also glaube ich nicht, dass dies der Benutzer ist. – EricLaw

11

Für Suchende, hier ist ein weiterer Gedanke. Ich habe eine Anwendung, die meine Website auf robotische Weise manipuliert. Die Anwendung verwendet HttpWebRequest und HttpWebResponse in .Net 4.0. Nach zwei oder drei erfolgreichen GETs würde der nächste dauerhaft gesperrt. In einem anderen Beitrag wurde vorgeschlagen, dass das Schließen eines HINTERNETs dazu führen kann, dass eine Anwendung bei einem nachfolgenden GET für denselben Host blockiert, da die Anzahl der parallelen Verbindungen zum selben Host begrenzt ist. Ich weiß nicht, ob das unter der Decke passierte, aber ich dachte, ich würde zurückgehen und herausfinden, wo ich die Dinge schließen könnte.

Ich schloss alle meine HttpWebResponse Objekte im Code und mein Problem ging weg. Aus diesem Grund sehe ich nicht, warum Fiddler das Thema maskieren würde, aber es tat es. Bevor Sie die Closes hinzufügen, wird eine bestimmte Anforderung in der Sequenz regelmäßig außer Kraft gesetzt. Nach dem Schließen der Antworten klärte sich alles auf und ich konnte ohne Proxying durch Fiddler laufen.

+0

Ja, das war mein Problem. So einfach, es scheiterte konsequent nach 2 Anfragen. Danke Prof! –

+0

kann ich auch bestätigen - eine einfache Antwort.Schliessen(); habe mein Problem behoben. – Anders

+0

Ich möchte auch meinen Dank für diesen Beitrag (4 Jahre später!) Hinzufügen, da dies auch für Objekte von PowerShell3 und System.Net.WebRequest gilt, die nicht bereinigt werden, wenn sie nicht mehr verfügbar sind. Also musste ich einen Aufruf zu [System.Net.WebRequest] .abort() hinzufügen, bevor ich den Gültigkeitsbereich und alle try/catch-Blöcke verließ. – JonnyG

3

Das Schließen aller HttpWebRequest Objekte als @ProfVonLemongargle vorgeschlagen behoben das gleiche Problem, das ich hatte.

Fiddler schließt wahrscheinlich die Verbindungen zum Server, sodass die gleichzeitige Verbindungsbeschränkung maskiert wird, wenn Ihre App sie als Proxy verwendet. Siehe diesen Thread für weitere Informationen: HttpWebRequest times out on second call

1

ältere Kette, aber ich entdeckte das gleiche Problem in unserem Code. Es war, weil es console.log-Befehle im Javascript gab. Dies führte zu blockiertem JavaScript-Code.

0

Hatte das gleiche Problem in einem Unternehmensnetzwerk, öffnete ich Fiddler2 um zu diagnostizieren, was gesendet/empfangen wurde und das Problem wegging! Nach weiteren Recherchen fand ich heraus, dass Fiddler den Datenverkehr wie einen Proxy durchtunnelt und mein Unternehmensnetzwerk verwendet auch ein automatisches Konfigurationsskript für einen Proxy (ich nehme an, Fiddler hat es durch den richtigen System-Proxy getunnelt, von dem meine App nichts wusste)

um meine VB.net Programm läuft alles zu bekommen was ich tun musste, um die Proxy-Einstellungen auf die Anfrage hinzufügen wurde:

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