gpt4 book ai didi

c# - 发生传输级错误(提供程序 : TCP Provider, 错误 : 0 - The semaphore timeout period has expired.)

转载 作者:行者123 更新时间:2023-12-05 06:37:32 25 4
gpt4 key购买 nike

我已经阅读了这些 SO 问题和 MS 文档:

同样的错误。我的 ConnectionString 中没有这些:ConnectRetryCount、ConnectRetryInterval 或连接超时。

这是我的数据库类的一个方法:

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 使用上面的代码。

enter image description here

最佳答案

确保您在连接字符串上使用的用户/登录名也可以访问 Azure SQL 数据库服务器上的主数据库,而不仅仅是用户数据库。这将提供更快的连接并且超时可能会消失。

使用 SQL Azure Execution 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。

关于c# - 发生传输级错误(提供程序 : TCP Provider, 错误 : 0 - The semaphore timeout period has expired.),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47650673/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com