我已经阅读了这些SO问题和MS Docs:
并且有同样的错误。我的ConnectionString中没有任何这些: ConnectRetryCount,ConnectRetryInterval或Connection Timeout。
这是我的DB类的一种方法:
public DataTable ExecuteSqlCommand(SqlCommand com)
{
var retryStrategy = new Incremental(5, TimeSpan.FromSeconds(1), TimeSpan.FromSeconds(2));
var retryPolicy = new RetryPolicy<SqlDatabaseTransientErrorDetectionStrategy>(retryStrategy);
SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["DataContext"].ToString());
com.Connection = con;
SqlDataAdapter da = new SqlDataAdapter(com);
DataTable dt = new DataTable();
try
{
retryPolicy.ExecuteAction(() =>
{
con.Open();
da.Fill(dt);
});
}
catch (Exception e)
{
var telemetry = new TelemetryClient(); // app insights (azure)
telemetry.TrackException(e);
}
finally
{
con.Close();
}
return dt;
}
那会更好些什么?从我的代码中删除重试内容并使用我的连接字符串中的属性?让框架完成工作?或者我目前的重试代码是否足够?我觉得企业库和重试的东西已经过时了,但找不到确定我想法的好来源。
我使用的是4.7并且还有EF 6.2,但大多数查询只使用上面的代码SqlCommands
。
答案 0 :(得分:0)
确保您在连接字符串上使用的用户/登录名也可以访问Azure SQL数据库服务器上的主数据库,而不仅仅是用户数据库。这将提供更快的连接,超时可能会消失。
使用SQL Azure执行Estrategy可以帮助您解决此问题。
public class MyConfiguration : DbConfiguration
{
public MyConfiguration()
{
SetExecutionStrategy("System.Data.SqlClient", () => new SqlAzureExecutionStrategy());
}
}
public class MyConfiguration : DbConfiguration
{
public MyConfiguration()
{
SetExecutionStrategy(
"System.Data.SqlClient",
() => new SqlAzureExecutionStrategy(1, TimeSpan.FromSeconds(30)));
}
}
有关SQL Azure执行策略的详细信息,请访问this URL。