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