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

Azure SQL serverless is not waking up on connection attempt

我正在测试 Azure SQL 无服务器和 SSMS,它似乎工作正常,但在我的 ASP.NET 核心应用程序中它永远不会唤醒。

使用 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 服务器实例是从另一个订阅迁移过来的,迁移它的组给了它一个新名称,但他们做了一些允许也使用旧名称的事情。我正在研究如何做到这一点。当我发现那是什么时,我会更新这个答案。

事实证明,对无服务器数据库使用旧名称不会唤醒数据库。不知道为什么。但是,如果您更改为使用 new/real 服务器名称,它就可以工作。您必须添加重试连接,因为前几次连接可能会失败。

[更新]

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