.NET Framework と .NET Core で動作が違う。
- SQL Server 2019 Developer Edition (サービスは止めとく)
- .NET Core 5 / 3.1、.NET Framework 4.8
- Microsoft.Data.SqlClient 3.0.0
なんか、.NET Core だと、既定値の 15 未満に設定しても、既定値の 15 で動いてそうな。。
実際に使う分には困らないから、ソースまで見る気ないけど issue は登録しといた。
Microsoft.Data.SqlClient 3.0.0 が出たから、RetryLogicProvier 試そうとしてて、
タイムアウト待つの面倒やなぁで、1秒に設定したら何か遅いってとこで発覚。。。
.NET 5 or 3.1
using Microsoft.Data.SqlClient; using System; using System.Diagnostics; namespace ConnectTimeoutNotWorkCore { class Program { static void Main(string[] args) { Console.WriteLine(typeof(Program).FullName); OpenError(1); OpenError(60); Console.ReadKey(); /* ConnectTimeoutNotWorkCore.Program Start Error Number:10061 16672 Done Start Error Number:10061 65981 Done */ } static void OpenError(int connectTimeout) { var builder = new SqlConnectionStringBuilder() { DataSource = "localhost\\MSSQL2019", InitialCatalog = "master", IntegratedSecurity = true, ConnectTimeout = connectTimeout }; var stopwatch = new Stopwatch(); try { using (var conn = new SqlConnection(builder.ConnectionString)) { Console.WriteLine("Start"); stopwatch.Start(); conn.Open(); } } catch (SqlException e) { Console.WriteLine($"Error Number:{e.Number}"); } finally { stopwatch.Stop(); Console.WriteLine(stopwatch.ElapsedMilliseconds); Console.WriteLine("Done"); } } } }
.NET Framework 4.8
using Microsoft.Data.SqlClient; using System; using System.Diagnostics; namespace ConnectTimeoutNotWorkFx48 { class Program { static void Main(string[] args) { Console.WriteLine(typeof(Program).FullName); OpenError(1); OpenError(60); Console.ReadKey(); /* ConnectTimeoutNotWorkFx48.Program Start Error Number:258 1768 Done Start Error Number:258 60019 Done */ } static void OpenError(int connectTimeout) { var builder = new SqlConnectionStringBuilder() { DataSource = "localhost\\MSSQL2019", InitialCatalog = "master", IntegratedSecurity = true, ConnectTimeout = connectTimeout }; var stopwatch = new Stopwatch(); try { using (var conn = new SqlConnection(builder.ConnectionString)) { Console.WriteLine("Start"); stopwatch.Start(); conn.Open(); } } catch (SqlException e) { Console.WriteLine($"Error Number:{e.Number}"); } finally { stopwatch.Stop(); Console.WriteLine(stopwatch.ElapsedMilliseconds); Console.WriteLine("Done"); } } } }