我有一些连接到数据库的代码,非常标准。
在创建的DbContext中,我尝试查询一个表。
当我创建DbContext时,我放入了一个不存在的URL而不是实际的数据库URL。
所以我预计会失败,在这一点上,问题是,我无法让它更快地失败,最多需要30秒。
我从System.Data.SqlClient.SqlInternalConnection得到了大量的first change异常。
在建立与SQL Server的连接时发生与网络相关或特定于实例的错误。找不到服务器或无法访问。请验证实例名称是否正确,并确认SQL Server已配置为允许远程连接。(提供程序:命名管道提供程序,错误:40 - 无法打开到SQL Server的连接)
在 System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction)
我尝试创建自定义的DbConfiguration和DbExecutionPolicy,但似乎直到尝试连接了很多次后才会调用它们。
public class InternalsDbConfiguration : DbConfiguration
{
public InternalsDbConfiguration()
{
this.SetExecutionStrategy("System.Data.SqlClient", () =>
{
var r = new MyExecutionStrategy();
return r;
});
}
}
public class MyExecutionStrategy : DbExecutionStrategy
{
protected override bool ShouldRetryOn(Exception exception)
{
var s = exception as SqlException;
if (s == null)
return false;
if (s.Number == 53)
return false;
return true;
}
}
我无法让连接在30秒内更快地失败,因为它似乎会通过某个进程一直旋转,我似乎无法影响它,看起来像是一个没有任何退避的重试策略,在放弃之前会尝试15次并调用我的MyConnectionStratagy
来确定下一步操作。
有什么建议吗? 我希望第一次失败而不是继续尝试。