我编写了一个 Windows 应用程序,每 5 分钟对我的网站进行一次 ping 操作,以控制此时它是 UP 还是 DOWN。它在我们的网络和测试服务器中工作,但我们的实时环境在 Azure 中,它不允许我 ping 那个网站。
我可以使用什么来代替 Ping 在 Azure 中控制我的网站?如何?
我建议你把它放在你自己的基础设施之外。主要是因为ping
无论如何,某些东西可以给你非常有限的信息。如果该角色已启动并正在运行,但您的网站实际上因异常而崩溃怎么办?如果您有多个角色实例,其中一个已关闭,并且您的 ping 请求没有说明任何问题,该怎么办?
使用类似 Pingdom 的东西:
它可以让你做一些你自己的“内部”解决方案可能无法(或不容易)做的事情。例如事务监控(类似于非常基本的 UI 测试,例如让用户登录并点击)、多种警报方式(甚至是 Twitter 警报)和多个不同的请求位置(它可能在英国有效,但它是否有效从法国访问时?)。
像这样的服务是为了这个唯一目的而创建的。您需要定义您认为您的网站何时“启动”或“停止”。是它响应ping
's 的时候吗?当您的登录页面显示正常时?是在您的管理页面显示正常的时候吗?
使用 HttpWebRequest 和 HttpWebResponse 并记住 Dispose 您创建的对象。特别是 HttpWebResponse 的响应流。
HttpWebResponse res = req.GetResponse() as HttpWebResponse;
using (Stream respStream = res.GetResponseStream())
{
respStream.ReadByte();
respStream.Close();
}
我使用了 HttpWebRequest 和 HttpWebResponse 而不是 Ping,但是在 3 次之后程序由于某种原因冻结了。我将所有内容都放在了 try...catch 块中,但它也不会抛出任何异常,只会冻结。
try
{
var myRequest = (HttpWebRequest)WebRequest.Create(url);
var response = (HttpWebResponse)myRequest.GetResponse(); //After third time it freezes here
if (response.StatusCode == HttpStatusCode.OK)
{
labelResult.Text += TxtIPAddress.Text + " is Available " + " " + System.DateTime.Now.ToString() + " " + Environment.NewLine;
}
else
{
labelResult.Text += TxtIPAddress.Text + " is Unavailable " + System.DateTime.Now.ToString() + " " + Environment.NewLine;
}
}
catch (Exception ex)
{
labelResult.Text += TxtIPAddress.Text + " is Unavailable " + System.DateTime.Now.ToString() + " " + Environment.NewLine;
}
另一个更复杂的监控工具是PRTG
它提供了许多监视器,并且对于您希望监视的许多传感器是免费的。
这样,您不仅可以监控站点的存在,还可以监控特定调用的 Web 服务是否返回,即 SQL 查询。可能性几乎是无穷无尽的。