0

在这里 查看了示例代码,以了解如何处理 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上的页面:

此内容和描述的技术已过时,不再维护。有关详细信息,请参阅瞬态故障处理

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

重要提示:用于 Azure 存储和 Azure 服务总线的 SDK 的最新版本本机支持重试。建议使用这些而不是瞬态故障处理应用程序块

但是,我在任何地方都没有看到任何关于如何实现与示例类似的行为的示例,而是使用 Azure 服务总线 SDK 重试类。实现这一点的标准方法是什么?或者,上面的引用是说已经为 wcf 连接内置了重试机制,这样我就不必担心重新创建我的WebServiceHost和它相应的连接?

4

2 回答 2

0

请参阅:特定服务的重试指南

于 2017-12-20T02:38:13.677 回答
0

我在尝试了几种不同的解决方案后回答了这个问题,我认为目前最好的方法是使用最近更新的 Microsoft瞬态故障处理库而不是旧的 deprecated Microsoft.Practices.TransientFaultHandling该库与此处 示例中当前使用的已弃用库具有相似的功能,并且为指数退避提供的其余解决方案仍然可以与这个较新的(尽管绝对不是新的)库几乎相同。如果 Microsoft 认为这不是未来的发展方向,希望他们会更新他们的 azure relay 示例以显示推荐的解决方案或解决方案。然后,我可以更新这个答案。

于 2018-01-13T00:04:38.997 回答