ReliableSqlConnection的替代方法,用于异步Azure SQL调用

时间:2017-07-18 15:26:37

标签: c# azure ado.net azure-sql-database enterprise-library

我们目前正在使用ReliableSqlConnection来调用我们的Azure SQL数据库。这很好用。 但不幸的是,企业库是从2013年开始的,似乎不再开发了。但主要问题是,不支持 async db调用。

我一直在寻找SO和其他地方,但到目前为止我唯一能找到的就是波莉。甚至Polly似乎没有被广泛使用,我还没有找到SQL Server的例子。 我知道ADO.NET支持重试SqlConnection.Open(),但不支持重命令,因此它不是真正的解决方案。我有点惊讶,我们似乎是唯一有这个问题的人吗?

3 个答案:

答案 0 :(得分:2)

鲜为人知的事实是,瞬态容错现在内置于连接字符串(.NET 4.6.1+)中。 This document说:

  

如果您的客户端程序使用.NET Framework类System.Data.SqlClient.SqlConnection连接到Azure SQL数据库,您应该使用.NET 4.6.1或更高版本(或.NET Core),以便您可以利用它连接重试功能。 Details of the feature are here

     

SqlConnection对象构建连接字符串时,应协调以下参数之间的值:

     

ConnectRetryCount(默认值为1.范围是0到255.)
    ConnectRetryInterval(默认值为1秒。范围为1到60.)
    Connection Timeout(默认值为15秒。范围为0到2147483647)

     

具体而言,您选择的值应使以下等式为真:

Connection Timeout = ConnectRetryCount * ConnectionRetryInterval
     

例如,如果count = 3,interval = 10秒,则只有29秒的超时不会给系统足够的时间进行第3次和最后的连接重试:29< 3 * 10.

答案 1 :(得分:1)

我在eShopOnContainers项目中看到了一个很好的Polly用法示例(关于如何开发微服务架构的演示......)

嗯,正在使用Circuit Breaker实现,(看看这里:https://github.com/dotnet-architecture/eShopOnContainers/tree/dev/src/Web/WebMVC/Infrastructure),我会说,就像他们使用HTTP连接消费休息一样,你也可以用你的异步SQL连接......

正在使用它:

 if (Configuration.GetValue<string>("UseResilientHttp") == bool.TrueString)
  {
      services.AddSingleton<IResilientHttpClientFactory, ResilientHttpClientFactory>();
      services.AddSingleton<IHttpClient, ResilientHttpClient>(sp => sp.GetService<IResilientHttpClientFactory>().CreateResilientHttpClient());
  }
  else
  {
      services.AddSingleton<IHttpClient, StandardHttpClient>();
  }

所以你可以创建ResilientSqlClient并以类似的方式使用它。

我希望它可以帮助您解决这个问题。

答案 2 :(得分:0)

您是否按照here所解释的那样尝试了Async和Await模式?

希望这有帮助。

相关问题