【发布时间】:2020-04-11 09:34:15
【问题描述】:
我正在测试 Azure SQL Serverless,在 SSMS 中它似乎工作正常,但在我的 ASP.NET Core 应用程序中它永远不会唤醒。
使用 SSMS,我可以打开与休眠无服务器 SQL 数据库的连接,延迟后连接将通过。
使用我的 ASP.NET Core 应用程序,我尝试了同样的方法。从我尝试登录的登录页面,它打开了与数据库的连接。 10 或 11 秒后(我查看了默认超时,它应该是 15 秒,但在这种情况下,它似乎总是大约 10.5 秒 +/-0.5 秒)。根据文档,第一次连接尝试可能会失败,但后续尝试应该会成功,但我可以向数据库发送多个查询,但它总是失败并出现以下错误:
Microsoft.Data.SqlClient.SqlException (0x80131904): Database 'myDb' on server
'MyDbSvr.database.windows.net' is not currently available. Please retry the connection later. If the
problem persists, contact customer support, and provide them the session tracing ID of
'{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}'.
如果我使用 SSMS 唤醒数据库,那么登录网页可以连接到数据库并成功。
我已将Connect Timeout=120; 添加到连接字符串中。
在控制器上标记为异步的 HTTP 请求期间确实发生了连接,我想我不知道这是否有任何区别。
我是做错了什么还是需要做些什么才能让数据库唤醒?
[更新] 作为一个额外的测试写了以下测试
void Main()
{
SqlConnection con = new SqlConnection("Server=mydbsvr.database.windows.net;Database=mydb;User Id=abc;Password=xyz;Connect Timeout=120;");
Console.WriteLine(con.ConnectionTimeout);
con.Open();
var cmd = con.CreateCommand();
cmd.CommandText = "select getdate();";
Console.WriteLine(cmd.ExecuteScalar());
}
得到了同样的错误。
【问题讨论】:
-
我发现一些示例的超时参数名称不同 - Connection Timeout=120 ,SSMS 需要多长时间才能唤醒它?
-
通过这个文档docs.microsoft.com/en-us/dotnet/api/… 连接字符串参数可以是
Connect Timeout或Connection Timeout。我通过编写测试程序验证了Connect Timeout的工作原理。
标签: azure .net-core azure-sql-database serverless