构建调用Web服务的代码的最佳方法

时间:2012-01-30 17:32:36

标签: c# exception exception-handling

我通过httpwebrequest呼叫网络服务,并获得回复。 Web服务旨在全天候运行。

构建此代码的最佳方法是什么,检查服务是否“可用”?

我有什么:

if (NetworkIsAvailable())
{
  // Call web service
 // Handle exceptions within here.
}


else
{
 // to throw a relevant exception that there is no network
}

抛出异常是明智的,还是只返回false? svc永远不应该失效

1 个答案:

答案 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”可以根据您希望连接的“动荡”程度进行调整。