2013-09-25 5 views
0

Я построил 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; 
      } 
     } 

ответ

0
[DllImport("wininet.dll", SetLastError = true)] 
static extern bool InternetCheckConnection(string lpszUrl, int dwFlags, int dwReserved); 

const int FLAG_ICC_FORCE_CONNECTION = 1; 
bool internetStatus = false; 

if (InternetCheckConnection("http://www.google.com", FLAG_ICC_FORCE_CONNECTION, 0) || 
    InternetCheckConnection("http://www.microsoft.com", FLAG_ICC_FORCE_CONNECTION, 0) || 
    InternetCheckConnection("http://www.facebook.com", FLAG_ICC_FORCE_CONNECTION, 0)) 
{ 
    internetStatus = true; 
} 
1
public Contructor(){ 
System.Net.NetworkInformation.NetworkChange.NetworkAvailabilityChanged += new System.Net.NetworkInformation.NetworkAvailabilityChangedEventHandler(NetworkChange_NetworkAvailabilityChanged); 
} 

private void NetworkChange_NetworkAvailabilityChanged(object sender, System.Net.NetworkInformation.NetworkAvailabilityEventArgs e) 
     { 

       if (e.IsAvailable) 
       { 
        //connected 
       } 
       else 
       { 
        //disconnected 
       } 

     } 
Смежные вопросы