[ad_1]
Tôi có các thử nghiệm đang thực thi bằng cách sử dụng cơ sở dữ liệu SQL được lưu trữ trên Docker. Tôi đang gặp phải vấn đề về thời gian chờ trong một số bài kiểm tra
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.
Những gì tôi đã thử:
Tôi đã thử thêm ‘Thời gian chờ kết nối=60’ vào chuỗi kết nối
Tôi kiểm tra xem tôi có bao nhiêu kết nối bằng truy vấn bên dưới, tôi luôn có dưới 30 kết nối
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
Giải pháp 1
Có, tôi chắc chắn có thể truy cập được cơ sở dữ liệu. Trong số 3000 bài kiểm tra, một số bài kiểm tra không thành công ngẫu nhiên khi hết thời gian chờ Sql.
Dưới đây là phương pháp tôi đang sử dụng để mở kết nối DB
private DbConnection GetDBConnection() { var db = _sqlDBfactory.CreateConnection(); db!.ConnectionString = _databaseConnectionString + "Initial Catalog=clients;"; db.Open(); return db; }
Ví dụ gọi:
using var db = GetDBConnection(); try { return db.QueryFirst<string>( $"SELECT statment goes here... omitted purposly; } finally { db.Close(); }
[ad_2]
コメント