我通过httpwebrequest调用web服务,并得到响应。web服务应该24/7运行。
在检查服务是否“可用”的情况下,构造此代码的最佳方法是什么?
我所拥有的:
if (NetworkIsAvailable())
{
// Call web service
// Handle exceptions within here.
}
else
{
// to throw a relevant exception that there is no network
}
抛出异常或返回false是明智之举?SVC不应该关闭
最佳答案
根据您接收回的数据类型、检查频率等,我将使用通用解决方案,在出现故障时多次尝试连接,然后在出现故障时对“异常”进行分类(在我的经验中,没有两个异常是相同的)。
例如:
var failCount = 0;
var succeeded = false;
while ((failCount < 3) && (!succceeded)) {
try {
//call service....
succeeded = true;
} catch(WebException wex) {
//handle wex, for instance look for timeout and retry
} catch(...) {
//Handle other exceptions differently...
LogError("BOOOM: " + excep);
throw;
} catch(Exception ex) {
//handle a general exception
failCount++;
}
}
if (failCount >= 4) {
//Unspecified error multiple times, react appropriately...
}
显然你不想做这种多次尝试,如果它昂贵的调用,这里我假设它是一种“心跳”检查,不太昂贵。“failcount”可以根据您预期的连接“混乱”程度进行调整。