【问题标题】:ReliableDbProvider connections on remote database that is not Azure非 Azure 远程数据库上的 ReliableDbProvider 连接
【发布时间】:2017-07-30 06:05:20
【问题描述】:

我有使用 ADO.NET 与 SQL Server 数据库交互的软件。我想使用 DbProviderFactories 来获取工厂以获取连接,以减少与数据库的耦合。

ConnectionStringSettings connectionStringEntry = ConfigurationManager.ConnectionStrings["Default"];
string providerName = connectionStringEntry.ProviderName;
DbProviderFactory factory = DbProviderFactories.GetFactory(providerName);
DbConnection connection = factory.CreateConnection();
connection.ConnectionString = connectionStringEntry.ConnectionString;

等等……

我的 SQL Server 是远程的,与数据中心的 VPN 连接不稳定。它不是 Azure 服务器。我确实遇到过短暂的故障。我想使用 EnterpriseLibrary.TransientFaultHandling 来帮助管理瞬态故障。我没有成功找到可以放入 .config 中的 system.data/DbProviderFactories 的 DbProviderFactory。

我尝试了 ReliableDbProvider NuGet。安装包后,我按照示例在工厂中添加 ReliableDbProvider.SqlAzure 提供程序,然后更改我的连接字符串以使用它。

<system.data>
  <DbProviderFactories>
    <add name="Reliable Provider"
         invariant="ReliableDbProvider.SqlAzure"
         description="Reliable DB Provider for SQL Server"
         type="ReliableDbProvider.SqlAzure.SqlAzureProvider, ReliableDbProvider"/>
    <add name="Sql Azure Reliable Provider With Timeout Retries"
         invariant="ReliableDbProvider.SqlAzureWithTimeoutRetries"
         description="Reliable Db Provider for SQL Azure with Timeout Retries"
         type="ReliableDbProvider.SqlAzureWithTimeoutRetries.SqlAzureProvider, ReliableDbProvider" />
  </DbProviderFactories>
</system.data>

我希望我可以假设驱动程序名称中的“Azure”一词并不意味着它是特定于 Azure 的,而是适用于任何 SQL Server 连接。我不相信我可以做出这样的假设。当我在连接字符串中使用 providerName='ReliableDbProvider.SqlAzure' 时,我会立即收到信号量超时异常。当我恢复到 providerName='System.Data.SqlClient' 时,系统按预期运行,直到我得到一个暂时的传输异常。我是否遗漏了一些简单的东西可以让我使用 ReliableDbProvider,还是我必须实现一些更复杂的东西来处理瞬态故障并仍然使用 DbProviderFactories?

【问题讨论】:

    标签: c# sql-server enterprise-library


    【解决方案1】:

    我把这弄得太复杂了。我阅读了 Entlib6 手册。该库提供了一个 ReliableSqlConnection 类。我可以在任何需要 IDbConnection 的地方使用 Connection 成员。我可以将 ReliableSqlConnection.Connection 绑定到我的依赖注入容器中的 IDbConnection。我真的不需要 ReliableDbProvider 来提供帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-09-06
      • 1970-01-01
      • 2010-09-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多