Azure 函数 - SqlConnection 连接池和超时

Azure Function - SqlConnection connection pool & timeouts

注意 - 我已经阅读了 S.O 上关于此的其他主题,但并不完全相同...

.net 461 函数,c#

我有一个应用服务环境,其中有一个应用服务计划专用于这个单一的 Azure 函数,使用 2 个 P2 工作线程。

该函数本身以大约每秒 1-2 次的速度响应服务总线主题事件 - 作为响应,我们通过存储过程将数据写入数据中的 SQL 服务器中心.

在负载大大减少的预生产环境中,我们没有发现任何问题。在如上所述的生产负载下,我们始终收到 2 SQL 条错误消息:

1 - Sql异常 - 发生超时,这可能是由于连接池没有连接

然后在这条消息的第一个实例之后,始终如一地每个函数 运行 都会给出默认值

2 - Sql异常 - 发生超时,可以访问网络实例等。请检查 SQL 服务器是否存在

已让网络人员检查并且流量正在访问 SQL 服务器端口,但实际 SQL 服务器连接列表中不存在任何连接。

我们的 C# 代码,虽然我不能 post 实际代码,但非常简单 - 通过包裹在 using 块中的 Dapper 进行的单个存储过程调用。

using(var sqlConnection = new sqlConnection("connString"))
{
    sqlConnection.Open();
    // setup input params here
    // execute sproc here
    sqlConnection.Close(); // I know, shouldn't need this line when using a using block - but thought would check.
}

我们不明白的是在重新启动整个应用程序服务后的第一次函数调用 - 我们立即收到连接池错误,然后是超时。

我们的 Sql 连接字符串不包含对池大小或超时的特定更改(所以应该是所有 SQL 默认值)- 唯一的是生产 SQL 服务器 运行s 在非标准端口上(但可以访问)。

有两点需要注意:

1 - 我们应该使用 OpenAsync() 和 ExecuteAynsc() - 或者考虑到我们的负载不是非常高,同步版本是否仍然足够。

2 - 是否有任何特定于应用服务环境的内容会改变连接字符串池发生的情况?

提前致谢

编辑

根据要求:

异步任务 RunAsync(BrokeredMessage 消息,TraceWriter 日志){}

Datacentre SQL 服务器是 Sql Server Enterprise 2008R2

在非生产环境下调用的平均持续时间为 250-300 毫秒(我们有 Express Route)

有效负载 - 非常小,5-8 个字符串字段作为参数传递

明白了 - 连接池耗尽错误消息是一个令人沮丧的转移话题。

标准网络防火墙问题!!

谢谢大家