服务器关闭时的异常或http状态代码
本文关键字:http 状态 代码 异常 服务器 | 更新日期: 2023-09-27 18:22:39
我想监视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服务http://localhost/service.svc’太忙了
消息:
远程服务器返回错误:(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??
{
...
}
错误的实际内容实际上不应该是重要的——除非您正在监视服务上的各个操作(即,带有特定URL的某些数据的POST是否应该返回特定响应)——那么,实际上,您只需要查看状态码本身;为此,您需要查看所有的HTTP状态代码,并查看那些看起来像错误的代码。
作为一个很好的起点,您可能需要考虑几乎所有的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
;由于安全更新等原因,这些情况可能会在正常运行数天或数月后发生。在这种情况下,您不一定会确定服务处于关闭状态,但您可能预计它无法执行其预期功能。
400或500系列中的任何HTTP状态结果代码都是一个问题,会阻止您处理请求。所有这些错误都源于System.ServiceModel.CommunicationException,因此请检查该错误。