在迁移到Azure的过程中,我实施了Windows Azure AppFabric客户咨询团队“TransientFaultHandling框架”。 http://appfabriccat.com/2011/02/transient-fault-handling-framework/
以下是我对我的代码所做的一切(很容易看起来好得令人难以置信):
1 /在我的项目中引用Microsoft.AzureCAT.Samples.TransientFaultHandling.dll
(使用自动导入的命名空间)
2 /在公共DLL库上设置一个返回公共策略的公共函数:
Public Shared Function retryPolicy() As RetryPolicy
Dim oPolicy As RetryPolicy = New RetryPolicy(Of SqlAzureTransientErrorDetectionStrategy)(10, TimeSpan.FromMilliseconds(100))
Return oPolicy
End Function
3 /用oConn.Open()
替换所有oConn.OpenWithRetry(retryPolicy())
并将所有其他Reader
,Scalar
,NonQuery
替换为:
oCmd.ExecuteReaderWithRetry(retryPolicy())
oCmd.ExecuteNonQueryWithRetry(retryPolicy())
oCmd.ExecuteScalarWithRetry(retryPolicy())
4 /就是这样
它有效,我的意思是没有错误,但是当我正在测试我的本地SQL Server时,我不知道重试逻辑是否正确实现,因为我不知道测试连接失败的方法
我读了一些TransientFaultHandling框架的实现示例,其中一些包含了一个用于检测SQL Server错误代码的自定义创建类。 我没有创建这样的类来保持简单,因为我假设框架附带了一个关于基于SQL Azure异常代码重试的良好默认行为。
问题: - 如果经典SQL Azure连接失败,我的代码是否正常?或者我是否必须设置自定义类以自行检测代码异常?
答案 0 :(得分:3)
瞬态故障处理框架附带了一些重试策略,包括您提到的SQL Azure。您不应该对其进行任何更改以执行您希望它执行的操作。您看到的示例可供参考,因此您可以扩展框架,如果您想将其应用于尚未满足的内容。