注意 - 我已经阅读了关于这个的其他主题,但并不完全相同......
.net 461 函数,c#
我有一个应用服务环境,其中有一个应用服务计划,专门用于这个单一的天蓝色功能,使用 2 个 P2 工作人员。
该函数本身以大约每秒 1-2 次的速率响应服务总线主题事件 - 作为响应,我们通过存储过程将数据写入数据中心的 SQL 服务器。
在负载大大减少的预生产环境中,我们认为没有问题。在如上所述的生产负载下,我们始终收到 2 条 SQL 错误消息:
1 - SqlException - 发生超时,这可能是由于连接池没有连接
然后在此消息的第一个实例之后,一致地每个函数运行都会给出默认值
2 - SqlException - 发生超时,可以访问网络实例等。请检查 SQL 服务器是否存在
已让网络人员检查并且流量正在访问 SQL 服务器端口,但实际 SQL 服务器连接列表中不存在任何连接。
我们的 c# 代码,虽然我不能发布实际代码,但非常简单——通过包装在 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.
}
我们不明白的是在重新启动整个应用程序服务后的第一次函数调用中——我们立即得到连接池错误,然后是超时。
我们的 SqlConnection 字符串不包含对池大小或超时的特定更改(所有 SQL 默认值都应该如此) - 唯一的事情是生产 SQL 服务器在非标准端口上运行(但可以访问)。
要记住两件事:
1 - 我们应该使用 OpenAsync() 和 ExecuteAynsc() - 还是同步版本仍然足够,因为我们的负载并不高。
2 - 是否有任何特定于应用服务环境的内容会改变连接字符串池的情况?
提前致谢
编辑
按照要求:
异步任务 RunAsync(BrokeredMessage 消息,TraceWriter 日志){}
数据中心 SQL Server 是 Sql Server Enterprise 2008R2
在非生产环境中通话的平均持续时间为 250-300 毫秒(我们有 Express Route)
有效负载 - 非常小的 5-8 个字符串字段作为参数传递