注意 - 我已经阅读了S.O关于此的其他主题,但不完全相同......
.net 461功能,c#
我有一个应用服务环境,其中包含一个专门针对此单一天蓝色功能的应用服务计划,使用2x P2工作人员。
函数本身以大约每秒1-2的速率响应服务总线主题事件 - 作为响应,我们通过存储过程将数据写入数据中心的SQL服务器。
在负载量大幅减少的预生产环境中,我们认为没有问题。在如上所示的生产负载下,我们始终得到2条SQL错误消息:
1 - SqlException - 发生超时,这可能是由于连接池没有连接
然后在此消息的第一个实例之后,每次运行的函数将始终提供默认值
2 - SqlException - 发生超时,可以到达网络实例等。请检查SQL服务器是否存在
网络人员检查并且流量正在访问SQL Server端口,但实际的SQL Server连接列表中没有连接。
我们的c#代码虽然无法发布实际代码,但却非常简单 - 通过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.
}
我们不理解的是在重新启动整个app-service之后的第一个函数调用 - 我们立即得到连接池错误,然后是超时。
我们的SqlConnection字符串不包含对池大小或超时的特定更改(因此应该是所有SQL默认值) - 唯一的事情是生产SQL服务器在非标准端口上运行(但可以访问)。
要记住两件事:
1 - 我们是否应该使用OpenAsync()和ExecuteAynsc() - 或者同步版本仍然足够,因为我们的负载不是很高。
2 - App Service Environment是否有任何特定的更改连接字符串池的内容?
提前致谢
根据要求:
异步任务RunAsync(BrokeredMessage消息,TraceWriter日志){}
数据中心SQL Server是Sql Server Enterprise 2008R2
呼叫在非生产中工作的平均持续时间为250-300毫秒(我们有快速路线)
Payload - 非常小,5-8个字符串字段作为参数传递
答案 0 :(得分:0)
弄清楚了这一点 - 连接池耗尽错误消息令人沮丧的红鲱鱼。
标准网络防火墙问题!!
谢谢大家