配置中的 Microsoft.Data.SqlClient SqlConfigurableRetryLogicConnection 未应用

问题描述 投票:0回答:0

我正在尝试使用 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();
asp.net-core ado.net retry-logic data-access microsoft-data-sqlclient
© www.soinside.com 2019 - 2024. All rights reserved.