【问题标题】:check to if web-service is up and running - efficiently [duplicate]检查网络服务是否已启动并运行 - 有效[重复]
【发布时间】:2014-02-12 11:08:12
【问题描述】:

我正在关注,

 var request = (HttpWebRequest)WebRequest.Create(serviceUrl);
 var response = (HttpWebResponse)request.GetResponse();
 if(response.StatusCode == HttpStatusCode.OK)
 {
  //perform some operations.
 }

为了检查服务是否在我的 asp.net c# 4.0 应用程序中启动并运行。 它给了我预期的结果,但如果服务没有运行,它会花费太多时间(大约 1 分钟)来获得响应。

他们还有其他更好的方法来检查服务是否启动并运行?

【问题讨论】:

标签: c# asp.net web-services


【解决方案1】:

您的请求超时属性不会让故障响应在短时间内得到传递。参考this link,这里对超时场景进行了很好的讨论,也可以访问答案中提供的链接。您应该考虑使用对 Web 服务的异步调用(查找 对 Web 服务的异步调用 here)。

【讨论】:

    【解决方案2】:

    除了向请求对象添加超时之外,您不必做比已经做的更多的事情。请求超时应以毫秒为单位指定,因此5000 为 5 秒超时。

    请注意,您将需要捕获异常以检测超时,这是带有消息 The operation has timed outSystem.Net.WebException,因此您的代码将如下所示:

    var request = (HttpWebRequest)WebRequest.Create(serviceUrl);
    request.Timeout = 5000;
    try
    {
        var response = (HttpWebResponse)request.GetResponse();
        if (response.StatusCode == HttpStatusCode.OK)
        {
            //perform some operations.
        }
    }
    catch (WebException wex)
    {
        if (wex.Message == "The operation has timed out")
        {
            //   do stuff
        }
    }
    

    【讨论】:

    • :感谢您的回复。但是如果服务正在运行并假设 @ 10 秒响应该怎么办
    • 如果您“期望”返回 10 秒,这没关系,那么使用 11 秒的超时。但是,如果您想计算返回所需的时间,请使用较长的超时时间(60 秒),然后使用 Stopwatch 之类的内容来计算返回所需的时间。
    • 我目前的情况是,我的服务没有启动并运行,仍然需要时间@ 1 分钟才能得到响应。在这种情况下我怎样才能得到即时响应(如果服务没有运行) .
    • HttpWebRequest 就是这样工作的,它会等待Timeout 时间告诉你它离线。因此,您需要定义您的标准:例如“如果没有响应,我需要在 1 秒内知道,如果发生这种情况,我想再尝试 10 秒,看看它是否在线,但速度很慢”。如果这还不够,您需要在您的服务器上使用更高级的监控工具来监控应用程序池以及您的外部监控服务器。
    猜你喜欢
    • 1970-01-01
    • 2011-07-10
    • 2022-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-12
    • 2012-02-17
    相关资源
    最近更新 更多