Selfhosted Asp.Net WebApi停止接收reuqests

时间:2015-05-07 10:17:03

标签: c# asp.net asp.net-web-api

我在自托管的ASP.Net WebApi应用程序(控制台)中有一个REST服务。

某些客户端以特定间隔轮询服务器以获取新数据。总的来说一切都很好。

问题是,服务器在一段随机时间(约30分钟--2.5小时)后停止响应请求。所有客户端请求都开始超时。

奇怪的是,服务器似乎不再接收请求,因为不再调用控制器方法)。服务器没有抛出任何异常,控制台应用程序仍然响应。所以在请求到达API控制器之前,我只能假设存在问题。

在调试器中,一切似乎都很好。

如何诊断此类问题?

我还可以尝试修复所描述的行为吗?

注意:

  • 在多个系统上测试
  • .Net 4.5.1
  • Asp.Net WebApi 5.1.2

2 个答案:

答案 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基础架构,这样它就不再处理任何级别的请求了。