我想监视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)服务器不可用。
更新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??
{
...
}
答案 0 :(得分:2)
错误的实际内容实际上不应该是重要的 - 除非您监视服务上的各个操作(即,如果具有某些特定URL的数据的POST返回特定响应) - 实际上,那么,您我只是要查看状态代码本身;为此你要查看所有HTTP Status Codes并查看那些看起来像你所关注的错误。
作为一个很好的起点 - 你可能想要考虑几乎所有的5xx代码;因为它们都与服务器错误有关。
您可能还想考虑一些4xx代码(尽管这些代码通常与客户端连接,因此无情)。特别是:
400 - Bad Request
- 只要您确定服务器 能够理解请求
404 - Not Found
- 如果您确定给定的网址应该存在
405 - Method Not Allowed
- 如果您确定要支持
对于一些较窄的4xx代码,例如413 Request Entity Too Large
或414 Request-URI Too Long
;由于安全更新之类的事情,这些可能会在正常运行数天或数月之后发生。在这种情况下,您不一定要确定该服务 down ,但您可能会预期它无法执行其预期的功能。
答案 1 :(得分:1)
400或500系列中的任何HTTP状态结果代码都是一个问题,会阻止您处理请求。所有这些错误都来自System.ServiceModel.CommunicationException,因此请检查它。