我在 Azure 上使用 ClearDB ,共有4个连接可用。 ASP.NET Core 1.1 。
此外,我正在使用 Ngrok 来公开运行我的API的本地主机
当我发出同步请求时,我的 API 有时会使用相同的连接,但会在短时间内创建一个新连接,让旧的连接保持休眠状态。
它们需要很长时间才能消亡,我最终会使用同一个用户使用相同的远程主机IP建立4个连接,但每个连接的端口不同。
根据 ClearDB 门户网站,它们未被使用并具有等于“睡眠”的命令
我认为 Ngrok 可能导致这个问题。但是,当我尝试调用MySqlConnection.ClearPool(Connection);
我的API请求永远不会完成时,他们会永远停留在该命令上
我也会在每个请求结束时致电Close
和Dispose
有什么想法吗?
function1() {
Connection.Open();
var Cmd = Connection.CreateCommand() as MySqlCommand;
Cmd.CommandText = "SELECT * FROM users WHERE senderID=@SenderID";
Cmd.Parameters.AddWithValue("@SenderID", UserData.SenderID);
var result = Cmd.ExecuteReader();
if(result.HasRows) {
result.Read();
}
Cmd.Connection.Close();
Cmd.Dispose();
result.Dispose();
}
public bool DoesUserExist() {
var Cmd = Connection.CreateCommand() as MySqlCommand;
Cmd.CommandText = "SELECT senderID FROM users WHERE senderID=@SenderID";
Cmd.Parameters.AddWithValue("@SenderID", UserData.SenderID);
var result = Cmd.ExecuteReader();
bool UserExisits = result.HasRows;
Cmd.Connection.Close();
Cmd.Dispose();
result.Dispose();
return UserExisits;
}
function2() {
var Cmd = Connection.CreateCommand() as MySqlCommand;
long Time = DateTimeOffset.Now.ToUnixTimeSeconds();
if(DoesUserExist()) {
Cmd.CommandText = "UPDATE users SET lastcontact=@time, contextS=@contextS WHERE senderID=@SenderID";
} else {
Cmd.CommandText = "INSERT INTO users(senderID, contextS, lastcontact) VALUES (@SenderID, @contextS, @time)";
}
Cmd.Parameters.AddWithValue("@contextS", UserData.Context);
Cmd.Parameters.AddWithValue("@time", Time);
Cmd.Parameters.AddWithValue("@SenderID", UserData.SenderID);
Cmd.ExecuteNonQuery();
Cmd.Connection.Close();
Cmd.Dispose();
Connection.Close();
Connection.Dispose();
}