我正在尝试使用 app.config 文件按照 MS 建议的步骤将默认重试逻辑应用于 Microsoft.Data.SqlClient 但是当我进入代码并查看已应用于 SqlConnection 的新实例的 RetryLogicProvider 时只是默认提供程序,它忽略了配置文件设置。
我们有一个面向 .NET 6.0 的 .NET Core Web App,它引用了一个包含数据访问代码的 .NET 6.0 类库,并引用了最新的 5.1.1 Microsoft.Data.SqlClient 包。我们混合使用了经典的 ADO.NET 和 Dapper,尽管我正在测试的代码是经典的 ADO.NET。
我尝试将以下内容添加到数据访问类库中的 Web.Config 和新的 App.Config。两者似乎都没有任何作用。 MS 确实提到了 AppContext 安全开关,但这似乎只有旧版本的 SqlClient 才需要。
为了测试重试逻辑是否正常工作,我将目标数据库脱机并使用 Profiler 根据重试逻辑查看连接尝试。相反,我只是看到立即失败,也许我的测试方法是错误的?
<configuration>
<configSections>
<section name="SqlConfigurableRetryLogicConnection"
type="Microsoft.Data.SqlClient.SqlConfigurableRetryConnectionSection, Microsoft.Data.SqlClient"/>
<section name="SqlConfigurableRetryLogicCommand"
type="Microsoft.Data.SqlClient.SqlConfigurableRetryCommandSection, Microsoft.Data.SqlClient"/>
</configSections>
<SqlConfigurableRetryLogicConnection retryMethod="CreateExponentialRetryProvider"
numberOfTries="5" deltaTime="00:00:03" maxTime="00:00:45"/>
<SqlConfigurableRetryLogicCommand retryMethod="CreateIncrementalRetryProvider"
numberOfTries="4" deltaTime="00:00:02" maxTime="00:00:30"/>
</configuration>
ADO.NET 代码如下
using (var conn = new SqlConnection(Configuration.ConnectionString))
using (var cmd = new SqlCommand("User_GET", conn))
{
//conn.RetryLogicProvider checking this when breakpoint fires
conn.Open();