我是否需要TransientFaultHandling和SaveChangesWithRetries才能将数据保存到Azure存储中?

时间:2012-03-24 15:59:07

标签: c# azure azure-table-storage

http://msdn.microsoft.com/en-us/library/hh680905(v=pandp.50).aspx 瞬态故障处理提供了处理连接错误等的能力。

SaveChangesWithRetries()说它也可以在出错时重试。

我想知道,我是否需要在TransientFaultHandling上使用SaveChangesWithRetries换行;

或:因为他们阻止同样的事情,所以SaveChangesWithRetries()就足够了

1 个答案:

答案 0 :(得分:2)

这非常有趣。我不会想到“瞬态故障处理”(TFS)指南本来可以用于Windows Azure存储客户端。对于blob和队列(也有一些表操作),已经有一个默认的重试策略。因此,如果您要结合使用TFS策略,我肯定会删除默认情况下存储客户端上的重试策略(使用Retry.NoRetry)(这是每个30个内部的指数退避,4个重试策略)

所有这一切都说,我在实践中发现,Windows Azure存储的重试策略已证明比无用更糟糕(即最好不要使用它们)。如果没有指定非常自定义的重试策略,它们实际上根本不能正常工作。注意,我在谈论存储而不是SQL Azure。由于您使用的是基于REST的协议,因此没有状态连接可以在重试策略有意义的情况下进行“重置”。您最终看到的大多数错误(> 90%来自经验)都是您永远想要重试的错误。例如,大多数故障是403禁止,DNS解析失败,404错误等。几乎无一例外,你永远不会想重试那些(例如,如果你有不良凭据,为什么你会再尝试4次?)。在大多数情况下最终发生的事情是,您正在重试一个永远不会成功的错误,并且您浪费了大约2分钟(每次30秒重试4次)以最终放弃。我的建议是简单地禁用策略并处理异常。