使用重试机制处理wcf连接中的故障的标准方法是什么,特别是对于天蓝色服务总线?

时间:2017-12-20 01:53:06

标签: c# .net wcf azureservicebus azure-servicebusrelay

我查看了示例代码here,了解如何处理与azure中继的连接问题。他们在Microsoft.Practices.TransientFaultHandling中使用指数退避机制来处理故障连接的重新创建:

retryStrategy = new ExponentialBackoff(100000, TimeSpan.FromSeconds(1), TimeSpan.FromSeconds(60),
            TimeSpan.FromSeconds(1));

...
...

var shouldRetry = retryStrategy.GetShouldRetry();
if (shouldRetry(retryCount++, statusBehavior.LastError, out waitPeriod))
{
    Thread.Sleep(waitPeriod);

    Open();
    Console.WriteLine("Relay Echo ServiceHost recreated ");
}

经过更多研究,我注意到根据Microsoft.Practices.TransientFaultHandling上的页面:

  

此内容和所描述的技术已过时,不再维护。有关详细信息,请参阅Transient Fault Handling

然后,根据瞬态故障处理的链接,它声明:

  

重要说明:Azure存储和Azure Service Bus的最新版本的SDK本身都支持重试。建议使用这些而不是瞬态故障处理应用程序块

但是,我没有看到任何关于如何对示例实现类似行为的示例,而是使用Azure Service Bus SDK重试类。实现这个的标准方法是什么?或者,上面的引用是说已经内置了wcf连接的重试机制,这样我就不用担心重新创建WebServiceHost及其相应的连接了吗?

2 个答案:

答案 0 :(得分:0)

答案 1 :(得分:0)

我在尝试了几个不同的解决方案之后回答了这个问题,我认为目前最好的方法就是使用最新更新的Microsoft Transient Fault Handling Library而不是旧的已弃用的{{1} }}。该库具有与样本here中当前使用的已弃用的库类似的功能,并且针对指数退避提供的其余解决方案仍然可以与这个较新的(尽管绝对不是新的)库一样工作。如果微软认为这不是未来的发展方向,希望他们会更新他们的天蓝色继电器样品以显示推荐的解决方案或解决方案。然后,我可以更新这个答案。