服务器关闭时出现啥异常或 http 状态码

Posted

技术标签:

【中文标题】服务器关闭时出现啥异常或 http 状态码【英文标题】:What exception or http status code for when the server is down服务器关闭时出现什么异常或 http 状态码 【发布时间】:2012-02-28 09:02:45 【问题描述】:

我想监控 WCF 服务器,并在服务器关闭时发送电子邮件通知。为此,我正在编写一个控制台应用程序来定期向服务器发送虚拟请求,并检查是否发回了响应。当控制台应用收到异常时,服务器出现问题,包括服务器关闭。

但是,问题是我在服务器的不同状态下收到了不同的异常。以下是服务器处于不同状态时返回的异常。但是,似乎都属于服务器停机类别。有什么想法吗??:

IIS 关闭时

System.ServiceModel.EndpointNotFoundException,

留言: 在http://localhost/service.svc 上没有可以接受消息的端点监听。这通常是由不正确的 地址或 SOAP 操作。有关更多信息,请参阅 InnerException(如果存在) 详情。

内部异常消息:远程服务器返回错误:(404) Not Found

Web.config 文件被故意更改为错误名称时:

System.ServiceModel.ServiceActivationException 关联: http://localhost/service.svc 留言: 无法激活请求的服务“http://localhost/service.svc”。有关更多信息,请参阅服务器的诊断跟踪日志 信息。

其他不明原因

System.ServiceModel.ServerTooBusyException 留言: 位于 http://localhost/service.svc' 的 HTTP 服务太忙。 留言: 远程服务器返回错误:(503) Server Unavailable。

更新 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??
        
           ...
        

【问题讨论】:

【参考方案1】:

错误的实际内容不应该是真正的后果 - 除非您正在监视服务上的单个操作(即,带有某些数据到特定 URL 的 POST 是否应该返回特定响应) - 那么,实际上,您'只是要查看状态码本身;为此,您希望查看所有 HTTP Status Codes 并查看就您而言看起来像错误的那些。

作为一个很好的起点 - 您可能需要考虑几乎所有的 5xx 代码;因为它们都与服务器错误有关。

您可能还想考虑一些 4xx 代码(尽管这些代码通常与客户端相关,所以要无情)。特别是:

400 - Bad Request - 只要你能确定服务器应该能够理解请求

404 - Not Found - 如果您确定给定的 URL应该存在

405 - Method Not Allowed - 如果您确定给定的 HTTP 动词应该得到支持(例如 POST 或 DELETE)

对于一些较窄的 4xx 代码,例如413 Request Entity Too Large414 Request-URI Too Long;由于安全更新等原因,这些可能会在正常运行数天或数月后发生。在这种情况下,您不一定确定该服务已关闭,但您可能预计它无法执行其预期功能。

【讨论】:

感谢您的建议。该异常并不总是返回 http 状态码。【参考方案2】:

400 或 500 系列中的任何 HTTP 状态结果代码都会导致您的请求无法处理。所有这些错误都源自 System.ServiceModel.CommunicationException,因此请检查。

【讨论】:

以上是关于服务器关闭时出现啥异常或 http 状态码的主要内容,如果未能解决你的问题,请参考以下文章

HTTP状态码分类及异常状态码处理

HTTP返回码异常是因为啥原因

将 Rails 应用程序推送到 Heroku 时出现啥错误

getResponseCode 抛异常了 没有返回码 ? 为啥

使用dubbo引用和发布服务时出现的异常:HTTP状态500 - 请求处理失败; 嵌套异常是com.alibaba.dubbo.rpc.RpcException:无法在服务cn.e3mall.serv

HTTP 429,这个 Code 你可见过?