我在自托管的ASP.Net WebApi应用程序(控制台)中有一个REST服务。
某些客户端以特定间隔轮询服务器以获取新数据。总的来说一切都很好。
问题是,服务器在一段随机时间(约30分钟--2.5小时)后停止响应请求。所有客户端请求都开始超时。
奇怪的是,服务器似乎不再接收请求,因为不再调用控制器方法)。服务器没有抛出任何异常,控制台应用程序仍然响应。所以在请求到达API控制器之前,我只能假设存在问题。
在调试器中,一切似乎都很好。
如何诊断此类问题?
我还可以尝试修复所描述的行为吗?
注意:
答案 0 :(得分:0)
我发现了这个问题,发生这种情况的原因是因为连接泄漏。如果您要发送请求但未正确关闭请求,请在请求完成后或异常中,打开的连接数量最终会达到最大值。要么更改连接字符串中的最大打开连接数量,要么(首选方式)确保您的代码处理结束部分:
SqlConnection myConnection = new SqlConnection(ConnectionString);
try
{
conn.Open();
someCall (myConnection);
}
finally
{
myConnection.Close();
}
信用转到How can I solve a connection pool problem between ASP.NET and SQL Server?您可以在这里阅读更多相关信息。
答案 1 :(得分:0)
就我而言,问题是由永不停止的任务引起的。由于ReactiveExtensions Api的误用,我随机创建了永无止境的任务。看来,在某些时候,任务调度程序根本无法再处理它们,尽管我对此并不完全确定。
Thing了解到:看来,通过在应用程序代码中执行不好的操作(太多任务,SQL连接......),您可以终止WebApi基础架构,这样它就不再处理任何级别的请求了。