当用户会话结束时 ASP.NET,是否有任何方法可以关闭/释放现有的SQL Server连接,因为我收到该错误 我还在我的应用程序中使用实体框架
超时已过期。在获取 从池连接。这可能是因为所有池化 连接正在使用中,已达到最大池大小。
首先,忘记会话。您的连接根本不应该绑定到会话 - 如果是,则存在问题。如果问题是您的 EF 上下文与会话相关联:那么再说一遍,我会说您做得非常错误。
(IMO) Web 应用中的连接有两个合理的范围:
- 每个调用站点 - 即在需要时获取连接的位置(每个请求可能多次),并在退出相同方法之前立即处理它。这通常通过
using
块来实现。 - 每个请求 - 您将请求保持打开状态并重复使用它,然后在每个请求结束时关闭/处置它。这可以使用全局上下文和结束请求事件来实现。
使用 Global.asax 中的Session_End
protected void Session_End(object sender, EventArgs e)
{
// End connection
}
需要在 SQL Server 中执行作业时,都应打开和关闭连接,而不是尝试将连接保留较长时间并在最后关闭它。
连接池在现代数据库中非常有效,无需尝试将连接保持打开状态。在网站等情况下尤其如此,如果您保持连接打开时间过长,网站将无法很好地扩展。
这可能是因为 SQL 连接池已用尽(这与应用池不同)。可以通过连接字符串增加池大小来检查这一点:
Integrated Security=SSPI;Initial Catalog=northwind;Max Pool Size=100;