2

目前我有一个应用程序进行 3rd 方 API 调用,返回的数据是我在网页上显示的主要数据。

如果 API 出现故障,我的网站当前会出现故障(因超时而崩溃,并最终导致 IIS 停机)。

我可以采取哪些措施来防止网站宕机?

我倾向于某种监视服务,如果 API 关闭,我会重定向到解释我的应用程序也关闭的页面。

4

4 回答 4

2

如果可能的话,我会亲自存储信息并根据您的要求每 X 分钟同步一次。

如果 API 已关闭,那么您仍然拥有最后一批同步数据,这意味着没有停机时间。

编辑

如果您需要实时数据并希望在网络服务不可用时转发到页面,那么您可以执行以下操作:

internal bool WebServiceAvailable()
{
    bool Result = false;
    string Url = {ENTER URL}
    try
    {
        HttpWebRequest Req = (HttpWebRequest)WebRequest.Create(Url);
        Req.Timeout = 3000;

        using (HttpWebResponse Rsp = (HttpWebResponse)Req.GetResponse())
        {
            if (Rsp.StatusCode == HttpStatusCode.OK)
            {
                Result = true;   
            }
        }
    }
    catch (WebException) { }

    return Result;
}

if (!WebServiceAvailable() 
{
    //Redirect to Not Available page
}

我使用它,它似乎运作良好。

于 2013-01-21T16:12:23.343 回答
2

使用断路器模式。有关在 C# 中实现的一些建议,请参见此处

阅读 Michael Nygard 的书和这篇Netflix 博客文章以获得很好的建议,这里是关于断路器的StackOverflow 问题。

于 2013-01-21T16:12:51.603 回答
1

使用HttpWebRequest.Timeout (在 MSDN 上)等待一段合理的时间,捕获异常以了解何时向用户提供“稍后再试!”等内容。默认超时时间太长(100 秒)。

如果您的业务允许,您甚至可以在发生故障时向用户提供旧的/缓存的数据。

于 2013-01-21T16:22:10.973 回答
0

您能否从您的网页中的 AJAX 调用中调用您的服务器端代码(我认为它调用了第 3 方 API)(也许使用 jquery 方便)。这样,如果您从 AJAX 响应中收到错误或超时,您可以相应地更新您的页面,而不会破坏您的网站。

您可以为端点设置常规 AJAX 轮询(反过来轮询 API 以获取心跳)

于 2013-01-21T16:17:31.077 回答