我通过httpwebrequest呼叫网络服务,并获得回复。 Web服务旨在全天候运行。
构建此代码的最佳方法是什么,检查服务是否“可用”?
我有什么:
if (NetworkIsAvailable())
{
// Call web service
// Handle exceptions within here.
}
else
{
// to throw a relevant exception that there is no network
}
抛出异常是明智的,还是只返回false? svc永远不应该失效
答案 0 :(得分:4)
根据您收到的数据类型,检查频率等,我会使用通用解决方案,在失败时多次尝试连接,然后在失败时对“例外”进行分类(没有两个例外)在我的经验中也一样。)
例如:
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”可以根据您希望连接的“动荡”程度进行调整。