我想创建一个小型 Windows 应用程序,它会在每个时间段自动转到我的站点并检查它是否运行正常,是否发现它已关闭、无法正常工作或出现错误“示例:404,网络错误,与数据库的连接失败”它将在我的屏幕上显示一条消息。
我怎么知道使用任何 .NET 语言以编程方式存在错误?
使用WebClient
. 它看起来像这样:
WebClient client = new WebClient();
try
{
string response =
client.DownloadString("http://www.example.com/tester.cgi");
// We at least got the file back from the server
// You could optionally look at the contents of the file
// for additional error indicators
if (response.Contains("ERROR: Something"))
{
// Handle
}
}
catch (WebException ex)
{
// We couldn't get the file.
// ... handle, depending on the ex
//
// For example, by looking at ex.Status:
switch (ex.Status)
{
case WebExceptionStatus.NameResolutionFailure:
// ...
break;
// ...
}
}
Timer
您可以将其与's事件或其他东西挂钩Tick
以定期进行检查。
何苦?您可以从像RedAlert这样的提供商那里以便宜的价格获得更好的解决方案
这样做的好处是:
1) 它从防火墙外部测试您的站点,因此它可以检测到更广泛的问题。
2) 它是一个公正的第 3 方,因此如果您需要 SLA,您可以证明正常运行时间。
3) 只需支付少量费用,您就可以尝试诊断问题。
4)当出现问题时,它可以寻呼或发送电子邮件给您。
5)您不需要调试新服务器。
天啊,我听起来像是给这些家伙打的广告,但我保证我不会为他们工作或得到回扣。我刚刚对我们服务器的服务感到满意。
顺便说一句:我检查了定价,每个站点/月约为 20 美元。因此,您可能会在比自己构建它所需的时间更短的时间内支付一年的服务费用。
想要执行相同的功能,我首先研究了第三方解决方案。MonitorUs是一项免费且相当准确的特定服务。
但是,如果您想建立自己的,那么我会有一个建议。考虑使用 Head 请求而不是 get 请求:
HEAD 方法与 GET 相同,只是服务器不能在响应中返回消息体。响应 HEAD 请求的 HTTP 标头中包含的元信息应该与响应 GET 请求发送的信息相同。此方法可用于获取有关请求所隐含的实体的元信息,而无需传输实体主体本身。这种方法通常用于测试超文本链接的有效性、可访问性和最近的修改。w3.org
这是Peter Bromberg文章的链接,该文章解释了如何在 C# 中执行 Head 请求。
使用 HttpWebRequest,并将其包装在 WebException 的 try catch 中。异常对象中的错误代码将为您提供代码。404等。如果是500,您可以打印消息。
使用 System.Net.WebClient 对象。它比 HttpWebRequest 更容易使用。它有一个“DownloadString”方法,可以将 URL 的内容下载到字符串中。如果服务器返回 500,该方法也可能引发 WebException 错误。对于其他错误,您可以解析字符串并查找关键字。
如果你这样做,创建一个特殊的页面来运行任何特殊的子系统,比如数据库、文件 IO 等,并以纯文本而不是 html 的形式提供结果。这将使您能够更轻松地解析返回的数据,并且还可以捕获可能不会给您 404 或 500 HTTP 错误的 DB 或 IO 问题。
试试 Adventnet 的应用程序管理器(http://www.manageengine.com/products/applications_manager/),它可以免费使用 5 台显示器,并提供出色的监控功能
您可以配置在发送电子邮件等失败时可以执行的操作。
如果您希望在站点关闭时接收电子邮件/短信,请尝试Are My Sites Up基于 Web 的解决方案。