【发布时间】:2009-01-06 19:25:42
【问题描述】:
我有一个最多由 10 个客户端调用的 Web 服务。该网络服务由 7 个不同的 asmx 页面组成,每个页面有大约 100-200 个功能。
所有这些函数都针对 MSSQL2005 或 MS SQL2000 数据库工作。一天中的某些时段,来自客户端的流量很大,似乎我在 sql-server 上的连接用完了,导致所有客户端停止。
在每个函数中,我打开一个连接,执行操作,然后关闭连接,有时有事务,有时没有。
在服务器上,我看到它创建了很多连接,我不知道为什么它们没有消失,但即使在功能完成后仍然存在。所以我可以确定我的 10 个客户不时创建超过 80 个连接。有时它们中的一些会消失,有时它们在使用数小时后仍然存在。那里有某种池化吗?
问题 1: 是否有另一种方法来处理我应该使用的连接,例如每个 Web 服务的全局连接或任何其他方式?
问题 2: 如果可以处理每个函数的连接,那么为什么它不关闭服务器上的连接,使打开的连接列表一直越来越大,直到我摆脱连接错误?
这个问题与我的另一个问题有关但不一样:Strange SQL2005 problem. "SqlConnection does not support parallel transactions"
我现在已将其范围缩小到“失去连接”错误。
【问题讨论】:
-
您是否使用 Windows 身份验证并通过客户端的身份,或者您的 Web 服务是否有一个用户名/密码供每个连接使用?我认为前者会影响 ASP.NET 连接池的能力。
-
网络服务有一个用于创建所有连接的连接字符串。没有 Windows 身份验证。
标签: sql-server connection-pooling sqlconnection