服务器关闭时的异常或http状态代码

时间:2012-02-06 21:45:14

标签: c# .net wcf exception-handling http-error

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

2 个答案:

答案 0 :(得分:2)

错误的实际内容实际上不应该是重要的 - 除非您监视服务上的各个操作(即,如果具有某些特定URL的数据的POST返回特定响应) - 实际上,那么,您我只是要查看状态代码本身;为此你要查看所有HTTP Status Codes并查看那些看起来像你所关注的错误。

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

您可能还想考虑一些4xx代码(尽管这些代码通常与客户端连接,因此无情)。特别是:

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

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

405 - Method Not Allowed - 如果您确定要支持

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

答案 1 :(得分:1)

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