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.
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ń. –
@GrantThomas, próbowałem, ale nie jestem pewien, czy są one takie same czy różne. – user2711965