我已经构建了一个dll,如果我们有Internet,则返回true,否则返回false。 我们做到以下几点:1。 平呼吁我们的服务器,如果失败,再尝试下 2.调用get HTTP请求到我们的WCF API之一,http://db.OurDomainName.com/WCFService.svc/GetCurrentTimeUnixFormat检查Internet连接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;
}
}