5

我想监视 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??
        {
           ...
        }
4

2 回答 2

2

错误的实际内容不应该是真正的后果-除非您正在监视服务上的各个操作(即,带有某些数据到特定 URL 的 POST 是否应该返回特定响应)-实际上,您只是将查看状态代码本身;为此,您需要查看所有HTTP 状态代码并查看那些在您看来看起来像错误的代码。

作为一个很好的起点——您可能需要考虑几乎所有的 5xx 代码;因为它们都与服务器错误有关。

您可能还想考虑一些 4xx 代码(尽管这些代码通常与客户端相关,所以要无情)。尤其是:

400 - Bad Request- 只要您可以确定服务器应该能够理解请求

404 - Not Found- 如果您确定给定的 URL应该存在

405 - Method Not Allowed- 如果您确定应该支持给定的 HTTP 动词(例如 POST 或 DELETE)

对于一些较窄的 4xx 代码,例如413 Request Entity Too Largeor 414 Request-URI Too Long; 由于安全更新等原因,这些可能会在正常运行数天或数月后发生。在这种情况下,您不一定要确定该服务已关闭,但您可能预计它无法执行其预期功能。

于 2012-02-06T21:52:20.903 回答
1

400 或 500 系列中的任何 HTTP 状态结果代码都是会阻止您处理请求的问题。所有这些错误都源自 System.ServiceModel.CommunicationException,因此请检查。

于 2012-02-06T21:55:03.477 回答