如何处理我的代码中的 Web 服务客户端故障

How to handle a webservice client breakdown in my code

我正在编写一个程序,我在其中使用了网络服务客户端。 24-7-365。 程序以默认频率在服务器上运行。

我的问题是当网络服务(我们的业务供应商之一提供的网络服务)宕机并且我的对象创建失败时,我该如何处理?

摘要:

static void Main()
{
  // This object is based on a webservice supplied to us by 
  // a business supplier.
  var Plants = new foreignSupl.ExtWebServiceClient().GetPlants();

  // My problems is that - when the business suppliers system is down.
  // Then my program dumps.

  // Code in program that depends on: Plants.
  if (insertPlants(Plant, out Plants) == true)
  {
    insert = true;
  }
}

// 使用 try catch 的方法:

// I have tried to use try catch but then I get another problem.
//
// Visual studio says: 
// "The name 'Plant' does not exist in the current context.
//
static void Main()
{
  try
  {
    var Plant= new foreignSupl.ExtWebServiceClient().GetPlants();
  }
  catch
  {
    //handling the exception.
  }

  // Code in program that depends on: Plants.

  // Visual studio says: 
  // "The name 'Plant' does not exist in the current context.
  // Therefore I can't compile... 

  if(Plants != null)
  {
    if (insertPlants(Plant, out Plants) == true)
    {
      insert = true;
    }
  }
}

正确的做法 我感觉到我的方法是错误的,但我应该怎么做呢? 提前致谢。

就像我说的,这在您想要允许或交付的 SLA 中非常重要。 从事此类主题标记工作的人经常参考这本书,该书解释了一些与技术无关的概念。

https://pragprog.com/book/mnee/release-it

"n Release It!,Michael T. Nygard 向您展示了如何设计和构建您的应用程序以应对它将面临的严酷现实。您将学习如何设计您的应用程序以实现最长的正常运行时间,性能,以及 return 投资..."

这还取决于您对部署的选择以及对客户端的选择。微服务社区有很多有趣的概念。比如一次性服务等等。 所以失败是可以的,但是失败并期望有另一个实例接管工作负载。 Google for Chaos Monkey 来自 netflix 技术团队。 因此,花点时间……研究……考虑您的风险和预算……并做出技术选择。那里有很多关于该主题的信息。 HTH