Pin*_*ong 5 .net c# wcf exception-handling http-error
我想监视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??
{
...
}
Run Code Online (Sandbox Code Playgroud)
错误的实际内容不应该真正产生影响 - 除非您正在监视服务上的各个操作(即,带有某些数据的 POST 到特定 URL 应该返回特定响应) - 实际上,那么,您只是将查看状态代码本身;为此,您需要查看所有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
;可以想象,由于安全更新等原因,这些情况可能会在正常运行数天或数月后发生。在这种情况下,您不一定确定服务已关闭,但您可能预计它无法执行其预期功能。