2009-01-20 23 views
5

Jaka jest rozsądna ilość czasu oczekiwania na żądanie sieci, aby powrócić? Wiem, że to może być trochę załadowany jako pytanie, ale wszystko, co próbuję zrobić, to sprawdzić, czy strona jest dostępna.Przekroczono limit czasu na żądanie sieci Web

Być może jest lepszy sposób?

try 
{ 
    // Create the web request 
    HttpWebRequest request = WebRequest.Create(this.getUri()) as HttpWebRequest; 

    request.Credentials = System.Net.CredentialCache.DefaultCredentials; 

    // 2 minutes for timeout 
    request.Timeout = 120 * 1000; 

    if (request != null) 
    { 
     // Get response 
     response = request.GetResponse() as HttpWebResponse; 

     connectedToUrl = processResponseCode(response); 
    } 
    else 
    { 
     logger.Fatal(getFatalMessage()); 

     string error = string.Empty; 
    } 
} 
catch (WebException we) 
{ 
... 
} 
catch (Exception e) 
{ 
... 
} 

Odpowiedz

5

Należy zastanowić się, jak długo potrwa konsument usługi internetowej. jeśli łączysz się z serwerem internetowym DB i uruchamiasz długie zapytanie, musisz ustawić limit czasu usługi sieciowej na dłuższy czas niż czas, jaki zajmie zapytanie. W przeciwnym razie usługa internetowa (błędnie) przekroczy limit czasu.

Używam również czegoś podobnego (czas konsumencki) + 10 sekund.

2

bezceremonialny bym pozwolić 10 sekund, ale to naprawdę zależy od tego, jaki rodzaj połączenia sieciowego kod zostanie uruchomiony z. Spróbuj uruchomić kilka pingów testowych przez kilka dni/tygodni, aby zobaczyć, jaki jest typowy czas reakcji.

1

Rozsądny czas oczekiwania na żądanie sieci może się różnić w zależności od serwera. Jeśli serwer znajduje się na samym końcu łącza o wysokim opóźnieniu, wówczas odpowiedź będzie trwała dłużej niż w następnym pokoju. Ale wydaje się, że dwie minuty to więcej niż wystarczający czas na odpowiedź serwera. Domyślna wartość limitu czasu dla polecenia PING jest wyrażana w sekundach, a nie minutach. Proponuję zapoznać się z wartościami limitu czasu, które są używane przez narzędzia sieciowe, takie jak PING lub TRACERT do inspiracji.

1

Mogę tylko czekać (MAX) 30 sekund, prawdopodobnie bliższe 15. To naprawdę zależy od tego, co robisz i jaki jest wynik nieudanego połączenia. Ponieważ jestem pewien, wiesz, że istnieje wiele powodów, dla których można dostać timeout ...

1

Myślę, że to zależy od dwóch rzeczy:

  • prędkości sieci/obciążenia (jak inni napisali, używając ping potęgę dać o tym znać)
  • rodzaj strony, do której dzwonisz: np. czy jest to statyczna strona HTML, czy jest to strona, która może wykonać czasochłonne operacje (dostęp do bazy danych itp.)

W każdym razie myślę, że 2 minuty to dużo czasu. I zdecydowanie skróci czas oczekiwania do mniej niż 30 sekund.

2

Zmierzyłbym czas potrzebny na odpowiedź na strony, które istnieją. Jeśli wszystkie odpowiedzą mniej więcej w tym samym czasie, ustawię limit czasu, aby w przybliżeniu podwoić tę kwotę.

1

Rozumiem, że nie odpowiada to bezpośrednio na twoje pytanie, ale "odpowiedź" na to pytanie jest trochę trudna. W każdym razie, narzędzie, które wcześniej użyłem w przeszłości do zmierzenia czasu wczytywania strony z różnych części świata. Jest to bezpłatne i jeśli nie wykonałeś tego rodzaju testów, może to być pomocne, jeśli chodzi o rzetelne wyobrażenie o tym, jakie są typowe czasy ładowania strony dla danej strony z danej lokalizacji.

2

Po prostu chciałem dodać, że przez długi czas używam timeoutu adaptacyjnego. Może być prosty metrycznych jak:

period += (numTimeouts/numRequests > .01 ? someConstant: 0);

sprawdzone zawsze trafisz limitu czasu, aby utrzymać limity czasu poniżej 1% (na przykład). Tylko uważaj na zbyt małą dekompresję :)

Powiązane problemy