目前我有一个进行第三方API调用的应用程序,返回的数据是我在网页上显示的主要数据。
如果API关闭,我的网站目前会出现故障(从超时崩溃,最终导致IIS崩溃)。
我可以选择哪些方法来防止网站出现故障?
我倾向于某种监控服务,如果API关闭,我会重定向到页面解释我的应用程序也会关闭。
答案 0 :(得分: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
}
我使用它,它似乎运作良好。
答案 1 :(得分:2)
使用Circuit Breaker pattern。有关C#中实现的一些建议,请参阅here。
read Michael Nygard’s book和this Netflix blog post提供了很好的建议,这里是断路器的StackOverflow question。
答案 2 :(得分:1)
使用HttpWebRequest.Timeout
(on MSDN)等待一段合理的时间,捕获异常以了解何时向用户提供类似“稍后再试!”等内容。默认超时也是如此很长(100s)。
如果您的企业允许,您甚至可以在发生故障时向用户提供旧/缓存数据。
答案 3 :(得分:0)
您是否可以在网页中的AJAX调用中调用您的服务器端代码(我认为它称为第三方API)(可以使用jquery轻松实现)。这样,如果您从AJAX响应中收到错误或超时,您可以相应地更新您的页面,而不会破坏您的网站。
您可以为您的终端设置常规的AJAX轮询(然后轮询API以获取心跳)