RestSharp +服务器关闭 - 您如何知道服务器是否已关闭?

时间:2014-02-22 20:35:53

标签: c# restsharp

我想知道如何检查我所做的RestSharp请求是否因为服务器已关闭而导致其失败。

当我关闭我的服务器时,我得到状态代码“NotFound”,但可能是找不到特定记录(如果他们试图找到最近可能删除的记录,我会在我的网站上执行此操作)。 / p>

如何判断服务器实际上已关闭?

编辑

这是我的代码

   private readonly RestClient client = new RestClient(GlobalVariables.ApiUrl);
          var request = new RestRequest("MyController", Method.POST);
                request.AddParameter("UserId", "1");
                request.AddParameter("Name", name.Trim());

                var asyncHandle = client.ExecuteAsync(request, response =>
                {
                    var status = response.StatusCode;
                });

3 个答案:

答案 0 :(得分:0)

当服务器关闭时,它不应返回“404 NotFound”错误。

在这种情况下,最合适的是HTTP Error 503 - Service unavailable

  

Web服务器(运行Web站点)当前无法处理   由于临时过载或维护而导致的HTTP请求   服务器。这意味着这是一个暂时的条件   一段时间后会缓解。处于此状态的某些服务器可能   也简单地拒绝套接字连接,在这种情况下不同   可能会生成错误,因为套接字创建超时。

这样检查RestResponse.StatusCode是否为503,它会告诉您服务器已关闭。

答案 1 :(得分:0)

我遇到了同样的问题。

我决定检查ContentLength。至少我的web服务总是返回ContentLength> 0(即使对于NotFound出现)。这似乎有用了。

if ( response.StatusCode == System.Net.HttpStatusCode.NotFound &&
                response.ContentLength == -1 ){
   ==> client couldn't connect to webservice
}

答案 2 :(得分:0)

在我的场景中,我需要检查连接是否发生了任何事情,例如连接超时,无法解析主机名等。所以我还添加了以下代码:

try
{
    var client = new RestClient(_configuration.ServerUrl);
    var request = new RestRequest
    {
        Resource = _configuration.SomeUrl,
        Method = Method.POST
    };

    var response = client.Execute(request);
    if (response.ErrorException != null)
    {
        throw response.ErrorException;
    }
}
catch (WebException ex)
{
    // TODO: check ex.Status, if it matches one of needed conditions.
} 

有关WebExceptionStatus Enumeration的更多信息,请参阅以下链接https://msdn.microsoft.com/en-us/library/system.net.webexceptionstatus(v=vs.110).aspx