[英]Check Internet connection C#
我建立了一个dll,如果我们有互联网,则返回true,否则返回false。 我们执行以下操作:1.调用ping服务器,如果失败,则尝试下一个2.调用get http请求到我们的WCF API之一, http://db.OurDomainName.com/WCFService.svc/GetCurrentTimeUnixFormat
这是在Win服务中完成的。
在PC和某些服务器(Windows服务器2k R2)中,它可以连续几天正常工作,每隔2分钟我们就会醒来并测试连接。
但是,在Azure虚拟机中,它经过了几次却失败了,为什么?
我们在Web浏览器中尝试过: 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;
}
}
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
}
}
[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;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.