当服务器宕机时,应该采用哪种异常或HTTP状态码?

5
我希望监控一个WCF服务器,并在服务器宕机时发送电子邮件通知。为了实现这一目标,我正在编写一个控制台应用程序,定期向服务器发送虚拟请求,并检查是否已返回响应。当控制台应用程序收到异常时,表示服务器有问题,包括服务器宕机。
然而,问题在于,当服务器处于不同状态时,我收到不同的异常。以下是服务器在不同状态下返回的异常。但是,所有异常似乎都属于服务器宕机类别。有什么想法吗?:
当IIS关闭时
System.ServiceModel.EndpointNotFoundException, 消息:
没有端点侦听http://localhost/service.svc可以接受该消息。这通常是由于不正确的地址或SOAP操作引起的。如有必要,可参见InnerException获取更多详细信息。 内部异常消息:远程服务器返回错误:(404)未找到
Web.config文件被故意更改为错误名称时:

System.ServiceModel.ServiceActivationException
链接: http://localhost/service.svc
消息:
请求的服务 'http://localhost/service.svc' 无法激活。请参阅服务器的诊断跟踪日志以获取更多信息。

对于其他未知原因

System.ServiceModel.ServerTooBusyException
消息:
位于 http://localhost/service.svc 的 HTTP 服务太忙了。
消息:
远程服务器返回错误:(503) 服务器不可用。

更新1

异常并非总是返回http状态码。

更新2 除了使用WCF代理调用服务,我还必须使用WebRequest,如下所示:

       try
        {
            WebRequest webRequest = WebRequest.Create(uri);
            webRequest.Method = "GET";

            HttpWebResponse httpWebResponse = (HttpWebResponse)webRequest.GetResponse();                             

        }
        catch ()  //what excpetion will tell me server is down??
        {
           ...
        }
2个回答

2
错误的实际内容并不重要——除非你正在监视服务上的个别操作(例如,针对特定URL的带有某些数据的POST请求是否返回特定响应)——现实情况是,你只需要查看状态码本身;为此,你需要浏览所有HTTP状态码,找出在你看来像是错误的那些。
作为一个很好的起点——你可能想考虑几乎所有的5xx代码;因为它们都与服务器错误相关。
你还可以考虑一些4xx代码(虽然这些通常与客户端相关,所以要无情)。特别是: 400 - 错误请求——只要你能确信服务器应该能够理解该请求。 404 - 未找到——如果你确定给定的URL应该存在。 405 - 方法不允许——如果你确定给定的HTTP动词应该受支持(例如POST或DELETE)。
对于一些比较狭窄的4xx代码,例如413请求实体过大414请求URI过长;这些问题可能会在正常运行数天或数月后出现,原因可能是安全更新等。在这种情况下,您不一定要将服务标识为“已停止”,但您可能需要预计它无法执行其预期功能。

感谢您的建议。异常并不总是返回HTTP状态码。 - Pingpong

1

400或500系列中的任何HTTP状态结果代码都是一个问题,将阻止您的请求进行处理。所有这些错误都源自System.ServiceModel.CommunicationException,请检查该错误。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接