2009-06-23 10 views
16

Dostaję dziwny błąd. Mam skonfigurowany skrypt, który działa perfekcyjnie, gdy Fiddler jest otwarty - pobiera raport z witryny za pomocą httpwebrequest i wszystko działa dobrze!Httpwebreqest współpracuje z Fiddler On inaczej Timeout

JEDNAK działa tylko wtedy, gdy Skrzypek jest otwarty? Kiedy skrzypek nie działa, po prostu dostaję "Problem z czasem oczekiwania"

Czy ktoś wie, jak to naprawić i sprawić, by działał z moją aplikacją ASP.NET MVC?

Dzięki

Edit: Dzięki za odpowiedzi! Odnośnie serwera proxy - chciałem przetestować ten skrypt na Windows Azure - tak mało mylić, jak skonfigurować domyślne ustawienia proxy?

+1

słyszałem kilku ludzi donoszą, że napotykają problemy jak this-- zasadzie Skrzypek * zwiększa * wydajność przesyłania w porównaniu do niektórych typowych konfiguracji klientów. Zasadniczo, o ile nie można dostroić oprogramowania klienckiego (np. Zmieniając rozmiary buforów wysyłania), najlepszym rozwiązaniem jest zwiększenie limitu czasu na serwerze, aby zezwolić na dłuższy okres przed przesłaniem. Jak do * dlaczego * Skrzypek pomaga w tym scenariuszu Skrzypek buforuje żądań domyślnie, więc aplikacja wysyła pełny wniosek do Skrzypek, który zbiera je wszystko, a następnie nawiązuje połączenie z serwerem, a podmuchy wiatru dane do serwera jako najszybciej jak to możliwe. – EricLaw

Odpowiedz

2

Należy pamiętać, że Fiddler działa jako proxy. Praca aplikacji, gdy Fiddler działa, ale nie w inny sposób, może wskazywać na problem z domyślną konfiguracją serwera proxy. Otwórz Opcje internetowe (ewentualnie przez IE) i sprawdź ustawienia proxy. W szczególności zwróć uwagę, czy konfigurujesz za pomocą skryptu.

Wspomnę o jednej bardzo nieprawdopodobnej możliwości, choć tak naprawdę mi się to przydarzyło. Na moim komputerze zainstalowałem pewien produkt antywirusowy. Z jakiegoś powodu wydawało mi się, że moja subskrypcja wygasła. W rezultacie oprogramowanie nie działało, a zatem nie mogło aktualizować listy programów, które mają dostęp do Internetu. Programy zainstalowane po wygaśnięciu nie zadziałają, chyba że działa Fiddler (ponieważ Fiddler został zainstalowany przed wygaśnięciem, był na liście "Good"). Każdy inny program zainstalowany po wygaśnięciu był na liście "Zły" (domyślnie).

+0

Dzięki za odpowiedź! Odnośnie serwera proxy - chciałem przetestować ten skrypt na Windows Azure - tak mało mylić, jak skonfigurować domyślne ustawienia proxy? –

+0

Czy masz już uruchomione na swoim normalnym systemie Windows? Zrób to zanim zaczniesz zajmować się Azure. –

1

Czy używasz protokołu HTTPS? Jeśli tak, Twój kod może nie ufać certyfikatowi zdalnego serwisu, a Fiddler może przekazywać dane do Twojej aplikacji. Wyślij nam komunikat o błędzie i minimalną ilość kodu, który replikuje ten problem.

+0

Cześć Dave, tak - działa z HTTPS. Nie jestem na moim PC, gdzie kod jest (w pracy) wszelkie pomysły (jeśli tak jest), jak naprawić ten problem? –

+0

Spójrz na http://msdn.microsoft.com/en-us/library/system.net.servicepointmanager.servercertificatevalidationcallback.aspx. Prawdopodobnie będziesz musiał powiedzieć swojemu kodowi, aby zaakceptował certyfikat witryny, z którą rozmawiasz. –

+0

Skrzypek pojawi się okno dialogowe z ostrzeżeniem modalnego jeśli strona prezentuje niewłaściwy certyfikat, więc nie sądzę, że to właśnie ten użytkownik napotyka. – EricLaw

11

Dla poszukiwaczy tutaj jest inna myśl. Mam aplikację, która manipuluje moją stroną internetową w sposób zrobotyzowany. Aplikacja korzysta z HttpWebRequest i HttpWebResponse w .Net 4.0. Po dwóch lub trzech zakończonych sukcesem działaniach GET następne będą konsekwentnie blokowane. Inny post sugerował, że niewłaściwe zamknięcie HINTERNETa może spowodować, że aplikacja zablokuje się na kolejnym GET-ie na tym samym hoście ze względu na ograniczenie liczby równoległych połączeń z tym samym hostem. Nie wiem, czy to się dzieje pod kołdrą, ale myślałem, że wrócę i ustalę, gdzie mogę zamknąć.

Zamknąłem wszystkie moje obiekty HttpWebResponse w kodzie i mój problem zniknął. Z tego nie rozumiem, dlaczego Skrzypek zamaskował sprawę, ale tak się stało. Przed dodaniem zamknięć konkretne żądanie w sekwencji będzie konsekwentnie przekraczać limit czasu. Po zamknięciu odpowiedzi wszystko się wyjaśniło i mogłem biec bez pośrednictwa przez Skrzypka.

+0

Tak, to był mój problem. Tak proste, po dwóch żądaniach ciągle się nie powiodło. Dzięki, Profesorze! –

+0

Mogę również potwierdzić - prosta odpowiedź.Close(); naprawiłem mój problem. – Anders

+0

Chciałbym również podziękować za ten wpis (4 lata później!), Ponieważ dotyczy to również obiektów nie czyszczonych, gdy wychodzą poza zakres; więc musiałem dodać wywołanie [System.Net.WebRequest] .abort() przed wyjściem poza zakres i we wszystkich blokach try/catch. – JonnyG

3

Zamknięcie wszystkich obiektów HttpWebRequest jako @ProfVonLemongargle sugerowało naprawienie tego samego problemu, który miałem.

Fiddler prawdopodobnie zamyka połączenia z serwerem, więc ograniczenie liczby jednoczesnych połączeń jest maskowane, gdy aplikacja używa go jako serwera proxy. Więcej informacji można znaleźć w tym wątku: HttpWebRequest times out on second call

1

starszy łańcuch, ale odkryłem ten sam problem w naszym kodzie. Było tak dlatego, że w javascript były pozostałe polecenia console.log. Doprowadziło to do zablokowania kodu javascript.

0

miał ten sam problem w sieci firmowej, otworzyłem Fiddler2 zdiagnozować co było wysyłane/odbierane i problem odszedł! Po dalszych badaniach odkryłem, że Skrzypek tunele ruch przez niego jak serwer proxy i moja sieć korporacyjna wykorzystuje również skryptu automatycznej konfiguracji dla proxy (zakładam Skrzypek został tunelowanie go przez właściwego pełnomocnika systemu, którego moja aplikacja nie wiedziała)

aby uzyskać mój program VB.net działa wszystko, co musiałem zrobić, to dodać ustawienia proxy na życzenie:

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