[ad_1]
Saya menjalankan pengujian yang menggunakan database SQL yang dihosting di Docker. Saya menghadapi masalah batas waktu pada beberapa tes
var msSqlContainer = new ContainerBuilder() .WithImage("mcr.microsoft.com/mssql/server:2017-latest") .WithName(Guid.NewGuid().ToString()[..5]) .WithPortBinding(1433, true) .WithEnvironment("ACCEPT_EULA", "Y") .WithEnvironment("SQLCMDUSER", "sa") .WithEnvironment("MSSQL_SA_PASSWORD", password) .WithEnvironment("SQLCMDPASSWORD", password) .WithCleanUp(true) .WithNetwork(network) .WithWaitStrategy(Wait.ForUnixContainer().UntilPortIsAvailable(1433)) .Build(); await msSqlContainer.StartAsync(); var msSqlPort = msSqlContainer.GetMappedPublicPort(1433); _databaseConnectionString = $"Server={msSqlContainer.Hostname},{msSqlPort};User Id=sa;Password={password};TrustServerCertificate=true;";
Timeout after 239.3025928 calling database. Caller:get_cust_messages_by_cust Message:Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding.
Apa yang saya coba:
Saya telah mencoba menambahkan ‘Connection Timeout=60’ ke string koneksi
Saya memeriksa berapa banyak koneksi yang saya miliki menggunakan kueri di bawah ini, yang mana koneksi saya selalu di bawah 30
SELECT a.* FROM (SELECT DB_NAME(dbid) as DBName, COUNT(dbid) as NumberOfConnections, loginame as LoginName FROM sys.sysprocesses WHERE dbid > 0 GROUP BY dbid, loginame) a ORDER BY a.DBName, a.LoginName
Solusi 1
Ya, saya yakin database dapat dijangkau. Dari 3000 tes ada yang gagal secara acak dengan batas waktu Sql.
Di bawah ini adalah metode yang saya gunakan untuk membuka koneksi DB
private DbConnection GetDBConnection() { var db = _sqlDBfactory.CreateConnection(); db!.ConnectionString = _databaseConnectionString + "Initial Catalog=clients;"; db.Open(); return db; }
Contoh panggilan:
using var db = GetDBConnection(); try { return db.QueryFirst<string>( $"SELECT statment goes here... omitted purposly; } finally { db.Close(); }
[ad_2]
コメント