Azure SQL 无服务器在连接尝试时未唤醒



我正在测试Azure SQL Serverless,从SSMS中它似乎工作正常,但是从我的 ASP.NET Core应用程序中,它永远不会唤醒。

使用 SSMS,我可以打开与休眠无服务器 SQL 数据库的连接,延迟后连接将通过。

使用我的 ASP.NET 核心应用程序,我尝试了相同的方法。从登录页面,我尝试登录,这将打开与数据库的连接。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());
}

并得到同样的错误。

我想通了,这是最愚蠢的事情。

此 Azure SQL Server 实例是从另一个订阅迁移而来的,迁移它的组为其指定了新名称,但他们执行了一些操作,也允许使用旧名称。我正在研究如何做到这一点。当我发现那是什么时,我会更新这个答案。

事实证明,将旧名称与无服务器数据库一起使用不会唤醒数据库。不知道为什么。但是,如果您更改为使用新的/真实的服务器名称,它将起作用。您必须向连接添加重试,因为它可能会在前几次失败。

[更新]

新服务器允许使用 Azure SQL 数据库别名使用旧名称登录 https://learn.microsoft.com/en-us/azure/sql-database/dns-alias-overview

最新更新