我通过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”可以根据您预期的连接“混乱”程度进行调整。

10-05 22:44