静态方法C#.net应用程序中的问题

时间:2010-10-06 09:56:55

标签: c# iis concurrency

我在类中使用静态方法,这个静态方法包含一个连接字符串。我在所有其他方法中使用此静态方法来打开数据库连接,并在此方法中部署连接。

在IIS中部署此应用程序后,当两个用户在两台不同的计算机上登录该应用程序并一次访问包含相同菜单的同一页面时,我收到的错误为:

  

Cannot perform this operation for disposed connection

为什么会这样?

4 个答案:

答案 0 :(得分:2)

我怀疑你实际上有一个存储连接的静态变量,而不是每个请求都有一个连接。您不应该这样做:每个请求都应该根据需要打开连接,并在最后处置连接...但是您不应该将连接存储在其他请求可能使用它的字段中。

当然,如果您能够向我们展示一些示例代码,那么诊断起来会更容易......

答案 1 :(得分:0)

您遇到并发问题。你必须实现某种形式的线程安全来解决这个问题。关于这一点有很多文章,有利有弊。

答案 2 :(得分:0)

由于您在创建它的方法中处理了连接,您是否可以尝试在此方法之外的某个地方使用此连接,而该方法已经处理好了?

答案 3 :(得分:0)

如果在回答How to debug the application after deployed in IIs?时我说这听起来是问题的原因,那就是你在静态确定你的连接范围。

在回答Error when multiple users access my web app at the same time时,Marc Gravell说它听起来像一个静态资源,特别是连接,并建议你通过在本地确定它们来修复它。

在回应他时,你说它不是静态范围的。

现在,您说您正在通过静态方法操作连接,并以相同的方法关闭它。这似乎更有可能出现这种情况,这就是Jon Skeet在这里提出的建议。

如果您没有显示示例代码以显示其他内容,您能否看到人们如何继续认为您的连接是静态的?

也许不是,但它与你在开始时完美描述的症状相匹配,现在仍然匹配它。这就是三个不同线程中的三个不同的人提出相同结论的原因。问第四次可能只是让第四人提供相同的答案,除非你证明为什么不能如此,因为它确实很好地匹配问题。

“精神错乱正在重复同样的行为并期待不同的结果” - 丽塔梅布朗。