2013-09-06 8 views
11

Używam w mojej aplikacji HttpWebRequest, która sprawdza niektóre identyfikatory URI w wielu wątkach. Otrzymuję wiele wyjątków od czasu.Różnica między operacją ma limit czasu i (504) Limit czasu bramki

  • Operacja wygasła
  • Zdalny serwer zwrócił błąd: (504) Bramka Timeout.

Ich dane są jak:

System.Net.WebException: The operation has timed out at System.Net.HttpWebRequest.GetResponse() at ......

i

System.Net.WebException: The remote server returned an error: (504) Gateway Timeout. at System.Net.HttpWebRequest.GetResponse() at ....

Jaka jest różnica między tymi dwoma.

Moja funkcja jest jak:

public bool CheckUri(Uri m_url) 
{ 
    try 
    { 
     HttpWebRequest request = HttpWebRequest.Create(m_url) as HttpWebRequest; 
     request.UserAgent = "MyUserAgent"; 

     //For: The underlying connection was closed: An unexpected error occurred on a receive. 
     request.KeepAlive = false; 
     request.ProtocolVersion = HttpVersion.Version10; 

     request.Method = "HEAD"; //Get only the header information 
     using (HttpWebResponse response = request.GetResponse() as HttpWebResponse) 
     { 
      int statusCode = (int)response.StatusCode; 
      if (statusCode >= 100 && statusCode < 400) //Good requests 
      { 
       string sContent = null; 
       using (var stream = response.GetResponseStream()) 
       using (StreamReader loResponseStream = new StreamReader(stream)) 
        sContent = loResponseStream.ReadToEnd(); 
       return true; 

      } 
      else 
      { 
       return false; 
       //hard to reach here 
      } 
     } 
    } 
    //vexing exception 
    catch (WebException ex) 
    { 
     if (ex.Status == WebExceptionStatus.ProtocolError) //400 errors 
     { 
      var response = ex.Response as HttpWebResponse; 

      if (response != null) 
      { 
       Console.WriteLine("HTTP Status Code: " + (int)response.StatusCode); 
       Console.WriteLine(response.StatusCode); 
      } 
     } 
     else 
     { 
      Console.WriteLine(ex.Message); 
     } 
     return false; 

    } 
    catch (Exception ex) 
    { 
     Console.WriteLine(ex.Message); 
     return false; 
    } 
} 

Także jeśli ktoś mógłby mi powiedzieć, że nie będzie problemem, jeśli wiele wątków wywołać tę metodę z różnych URI. Nie otrzymuję wyjątku krzyżowego. Ta metoda jest w rzeczywistości częścią usługi Windows, która monitoruje listę prawie 200 identyfikatorów URI.

+1

Jednym z nich jest bezpośredni limit czasu, tj. Konkretna operacja; druga oznacza, że ​​brama (trasa w drodze do miejsca docelowego) uległa awarii. Czy ty, Google? Istnieje wiele odniesień. –

+0

@GrantThomas, próbowałem, ale nie jestem pewien, czy są one takie same czy różne. – user2711965

Odpowiedz

16

In the lamest terms ...

"Czas oczekiwania na działanie" oznacza, że ​​TWÓRZ program wysyłający żądanie przekroczył limit czasu oczekiwania na odpowiedź. Może to oznaczać:

  1. Nieprawidłowe połączenie z Internetem (jeśli wszystkie powodują ten błąd, to jest to prawdopodobne).
  2. Nieprawidłowe połączenie z hostem (z którym się łączysz ma problem).
  3. Zły DNS (jeśli hostem jest nazwa domeny, może to być przyczyną problemu).
  4. Zły agent hosta (coś na końcu hosta nie odpowiada poprawnie).

W takich przypadkach powinienem ręcznie przetestować połączenia z hostem, którego dotyczy luka, i rozwiązać te problemy w ten sposób. Spróbuj najpierw przetestować własne połączenie i inne hosty. Jeśli problem dotyczy konkretnego hosta, mogą wystąpić problemy, z którymi należy się skontaktować.

Po wyświetleniu komunikatu "504 - Limit czasu bramy" oznacza, że ​​TWOJ program pomyślnie nawiązał połączenie z hostem, ale coś poszło nie tak po stronie hosta i nie może zwrócić żądanej odpowiedzi. Nie jest to problem z połączeniem, ale problem związany z żądaniem lub z samym hostem. Możliwe, że host utknął w nieskończonej pętli, próbując przetworzyć żądanie, lub po prostu "zawiesił się", a agent przetwarzający twoją prośbę zrezygnował i odesłał twoją prośbę.

W takich przypadkach powinienem zobaczyć hosta, być może uruchamiając żądania testowe, które host zaakceptuje. Jeśli host nie znajduje się pod Twoją kontrolą, skontaktuj się z kimkolwiek i zgłoś błąd.

Krótko mówiąc. Pierwszy limit czasu jest prawdopodobnie związany z połączeniem, podczas gdy limit czasu 504 jest prawdopodobnie przetwarzaniem hosta. Mam nadzieję że to pomoże.

2

Możesz sprawdzić this link dla "Operacja przekroczyła limit czasu", a problem może wynikać z tego, że serwer jest już zajęty jakimś zadaniem. I (504) Limit czasu bramy oznacza, że ​​jeden serwer nie otrzymał szybkiej odpowiedzi z innego serwera, do którego uzyskiwał dostęp, próbując załadować stronę internetową lub wypełnić inne żądanie przeglądarki.

0

Operacja został przekroczony występuje podczas określonego czasu jest określona i serwer nie jest w stanie z powrotem reagować w danym czasie (występujące wewnątrz serwera zdalnego)

podczas

504 błędy w cyklu HTTP (występuje w komunikacji między klientem a serwerem) Dowolny klient (np. Twoja przeglądarka internetowa lub nasza usługa CheckUp Dół robota) przechodzi przez następujący cykl, gdy komunikuje się z serwerem sieci Web:

Uzyskaj adres IP z nazwy IP strony (adres URL witryny bez wiodącego "http: //"). To wyszukiwanie (konwersja nazwy IP na adres IP) jest dostarczane przez serwery nazw domen (DNS). Otwórz połączenie z gniazdem IP dla tego adresu IP. Napisz strumień danych HTTP przez to gniazdo. Odbierz strumień danych HTTP z powrotem z serwera WWW w odpowiedzi. Ten strumień danych zawiera kody stanu, których wartości są określane przez protokół HTTP. Przetwarzaj ten strumień danych pod kątem kodów statusu i innych przydatnych informacji. Ten błąd występuje w ostatnim kroku powyżej, gdy klient otrzymuje kod statusu HTTP, który rozpoznaje jako "504". (Ostatnia aktualizacja: marzec 2012 r.).

Mocowanie 504 błędy - ogólne

Problem ten jest w całości ze względu na powolny komunikacji IP między komputerami typu back-end, ewentualnie wraz z serwerem WWW. Tylko osoby, które skonfigurowały sieć w miejscu, w którym znajduje się serwer sieci Web, mogą rozwiązać ten problem.

+4

Twoja odpowiedź jest nieprawidłowa i myląca. "Przekroczono limit czasu operacji" * może być spowodowane * przez serwer (przez brak odpowiedzi), ale * występuje * na kliencie z powodu przekroczenia limitu czasu klienta. Jeśli chodzi o drugą część, wklejenie pierwszego wyniku z Google bez żadnych odniesień jest bezużyteczne. – Athari

13

Operacja wygasła jest klient błąd. Zwykle jest to spowodowane różnymi właściwościami *TimeoutWebRequest (i ich potomkami): Timeout, ContinueTimeout, ReadWriteTimeout. Jeśli serwer, na który wysłałeś żądanie, nie odpowiada w ustawionym limicie czasu, otrzymasz TimeoutException.

Aby uniknąć tego błędu, można zwiększyć limity czasu. Są one jednak domyślnie dość duże, więc zwiększenie ich jest mało prawdopodobne. Możesz spróbować kilka razy. Jeśli to nie pomoże, serwer prawdopodobnie nie działa.

504 Gateway Timeout jest błędem serwera serwera. Zwykle jest to spowodowane błędami lub przeciążeniem infrastruktury serwera, do której wysłano żądania. To jest czarna skrzynka dla ciebie.

Nie można nic zrobić z tym błędem, tylko administratorzy serwerów mogą rozwiązać ten problem. Jeśli błąd jest spowodowany przez przeciążenie, możesz spróbować kilkakrotnie przesłać prośbę, ale robienie tego zbyt często spowoduje oczywiście więcej szkód niż korzyści.

Ogólnie, jeśli nie otrzymasz kodu HTTP, jest to wyjątek od .NET. Jeśli dostaniesz kod HTTP, można spojrzeć na pierwszej cyfrze:

2** OK
3** Przekierowanie
4**Client błąd
5**Server błąd

+3

2 ** OK 3 ** Przekierowanie 4 ** Błąd klienta 5 ** Błąd serwera +1! – K3rnel31