Я использую HttpWebRequest
в своем приложении, которое проверяет некоторый URI в нескольких потоках. Я получаю несколько типов исключений времени.
- Операция завершена
- Удаленный сервер возвратил ошибку: (504) Тайм-аут шлюза.
Их детали похожи на:
System.Net.WebException: операция завершена на System.Net.HttpWebRequest.GetResponse() at......
и
System.Net.WebException: удаленный сервер возвратил ошибку: (504) Тайм-аут шлюза. в System.Net.HttpWebRequest.GetResponse() at....
В чем разница между этими двумя.
Моя функция похожа:
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;
}
}
Также, если кто-нибудь скажет мне, возникла бы проблема, если несколько потоков вызовут этот метод с разными URI. У меня нет исключения перекрестных потоков. Этот метод фактически является частью службы Windows, которая контролирует список из почти 200 URI.