服务器关闭时出现啥异常或 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 Large
或 414 Request-URI Too Long
;由于安全更新等原因,这些可能会在正常运行数天或数月后发生。在这种情况下,您不一定确定该服务已关闭,但您可能预计它无法执行其预期功能。
【讨论】:
感谢您的建议。该异常并不总是返回 http 状态码。【参考方案2】:400 或 500 系列中的任何 HTTP 状态结果代码都会导致您的请求无法处理。所有这些错误都源自 System.ServiceModel.CommunicationException,因此请检查。
【讨论】:
以上是关于服务器关闭时出现啥异常或 http 状态码的主要内容,如果未能解决你的问题,请参考以下文章
getResponseCode 抛异常了 没有返回码 ? 为啥
使用dubbo引用和发布服务时出现的异常:HTTP状态500 - 请求处理失败; 嵌套异常是com.alibaba.dubbo.rpc.RpcException:无法在服务cn.e3mall.serv