【发布时间】:2014-06-23 19:19:01
【问题描述】:
在迁移到 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 服务器错误代码。 我没有创建这样一个类来保持简单,因为我假设框架附带了一个很好的默认行为,关于基于 SQL Azure 异常代码的重试。
问题: - 如果经典 SQL Azure 连接失败,我的代码是否正常?还是我必须自己设置一个自定义类来检测代码异常?
【问题讨论】: