我被要求接管一个应用程序,在1-2个用户测试它的情况下运行良好,但是一旦我们通过更大的测试,它就开始崩溃了。我们看到随机超时,以及有关代码无法找到它预期要绑定到的某些列的消息,但只有1-2个用户正在使用。
该应用程序的结构是:
--------------
| WebSite |
--------------
| WebService |
--------------
| Database |
--------------
网站通过网络服务与数据库进行所有通信。通过webservice代码,我看到它使用一个类来完成数据库工作,并将其声明为类级变量:
private static SqlConnection cn;
然后在页面上需要连接的所有方法中使用它。作为静态,这意味着所有用户只有一个实例是正确的吗?我只想确认我正确看到它,因为我们删除它并正在测试它。看到这条线给我意味着连接对象的1个实例在所有用户之间共享,这可以解释为什么1-2个用户可以使用,但是用户数越多,排队等待的人越多,最终导致随机错误。只是想确认我是否正确理解了这一点。
感谢。
答案 0 :(得分:5)
是的,将跨用户访问静态变量。问题的真正根源是缺乏线程安全性,但不一定是共享连接对象。