Я построил dll, которые возвращают true, если у нас есть интернет и false, если нет. Мы делаем следующее: 1. вызова пинг нашего сервер, если не удалось, то попробуйте следующий 2. Позвони прибудет HTTP запрос к одному из нашего WCF API, http://db.OurDomainName.com/WCFService.svc/GetCurrentTimeUnixFormatПроверьте подключение к Интернету C#
Это сделано в выигрыше службе.
В ПК и некоторых серверах (сервер Windows 2k R2) он работает все время в течение дней без проблем, каждые 2 минуты мы просыпаемся и проверяем соединение.
Однако, в Azure виртуальной машине он прошел несколько раз, а затем провалился, ПОЧЕМУ?
Мы пытались, в веб-браузере: http://db.OurDomainName.com/WCFService.svc/GetCurrentTimeUnixFormat и увидеть результат, мы в течение 2 мин каждую секунду нажмите кнопку Обновить, чтобы увидеть, что он никогда не подводил.
Но сделайте то же самое из нашего WinService, это провалилось через несколько раз, начните получать тайм-аут !!!!
Мы не знаем, почему, похоже, брандмауэр, но почему он не блокирует браузер при обновлении !!!
здесь то, что мы сделали в .NET:
private static bool IsConnectedToInternetHttpRequest(string url = "http://db.OurDomainName.com/WCFService.svc/GetCurrentTimeUnixFormat")
{
//GET http://db.OurDomainName.com/WCFService.svc/GetCurrentTimeUnixFormat HTTP/1.1
//Host: db.tako.com
//Connection: keep-alive
//Cache-Control: max-age=0
//Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
//User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.76 Safari/537.36
//Accept-Encoding: gzip,deflate,sdch
//Accept-Language: en-US,en;q=0.8
try
{
var request = (HttpWebRequest)WebRequest.Create(url);
request.Timeout = (int)new TimeSpan(0, 0, 30).TotalMilliseconds;
request.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
request.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.76 Safari/537.36";
request.CachePolicy = new HttpRequestCachePolicy(HttpRequestCacheLevel.Refresh);
request.KeepAlive = true;
var response = (HttpWebResponse)request.GetResponse();
if (response.StatusCode == HttpStatusCode.OK)
{
return true;
}
else
{
return false;
}
}
catch (Exception)
{
return false;
}
}