生产服务器上的SQL Server 2000间歇性连接异常 - 特定环境问题?

时间:2009-01-08 12:07:14

标签: c# asp.net sql-server-2000 windows-server-2003

我们一直遇到间歇性问题,导致用户被强制退出应用程序。

我们的设置是Windows Server 2003标准版上的ASP.Net/C# Web应用程序,后端有SQL Server 2000。我们最近在我们客户的VMWare服务器上进行了一次重大产品升级(我们有一个专用于我们的客户实例),而我们在之前的版本中没有遇到这些问题,新升级带来的额外复杂性导致了很多问题。我们还在同一个盒子上运行SQL Server 2000(build 8.00.2039或SP4)和IIS / ASP.NET(.Net v2.0.50727)应用程序,并通过TCP / IP连接相互连接。


主要是抛出的异常是:

  

System.IndexOutOfRangeException:找不到表0。

     

System.ArgumentException:列'password'不属于表Table。

[这个例外发生在登录脚本中,即使有明确的密码列可用]

  

System.InvalidOperationException:已经有一个与此命令关联的打开DataReader,必须先关闭它。

[这个经常发生]

  

System.InvalidOperationException:此SqlTransaction已完成;它不再可用了。

     

System.ApplicationException:ExecuteReader需要一个开放且可用的连接。连接的当前状态是连接。

     

System.Data.SqlClient.SqlException:超时已过期。操作完成之前经过的超时时间或服务器没有响应。

就在今天,这是第一次:

  

System.Web.UI.ViewStateException:无效的viewstate。


我们使用与生产服务器相同数量的并发用户对应用程序进行了负载测试,但无法重现这些错误。即使只有8/9/10用户连接,它们也是非常间歇性的。我的直觉告诉我它的ASP.NET - SQL Server 2000连接问题..

我们在这个阶段几乎排除了代码级数据访问层错误(我们有一个由15名经验丰富的开发人员组成的开发团队),因此我们认为这是一个特定的生产服务器环境问题。

3 个答案:

答案 0 :(得分:1)

无效的Viewstate错误在高流量网站中非常常见。但是,如果您最近迁移到多个Web服务器,请确保共享相同的计算机密钥,以便在所有服务器上使用相同的密钥对Viewstate进行签名。 http://www.codinghorror.com/blog/archives/000132.html

根据其他错误,我猜你正在使用跨多个线程的共享连接。您的连接是存储在静态变量,应用程序状态,会话状态还是在多个请求中使用的其他对象中?也许在某处包含连接,命令或事务的哈希表。 ADO.Net对象都不是线程安全的。因此,请确保您只以单线程方式使用它们。

另一种可能性是你传递ADO.NET对象而不是一直处理它们并管理它们的范围。也许它们是在请求上下文中缓存的还是一些?

答案 1 :(得分:0)

我知道你不想听到这个,但是人比我说的要聪明(如果你不相信我,请查看McConnell的Code Complete):

这可能是你的代码,你的直觉可能是正确的:

  

我的直觉告诉我它的ASP.NET - SQL   Server 2000连接问题..

抛出的错误是非常具体的,从上下文来看,它们看起来只是在尝试连接并且遇到困难时 - 如果它只发生在客户端环境中,则可能表示设置未正确设置用于VM访问主机上的TCP连接(在不同的实例下)。


您确定您的代码 none 自移动之前是否已更改,并且您之前的环境是否已启用此类日志记录?它之前可能已经发生过(在较小程度上),但由于您没有启用日志记录,因此您的环境没有捕获它。

如果这不是问题,我正在正确阅读您的帖子:您正在客户端提供的客户端实例上运行服务器的管道和带宽?如果是这种情况,则很可能(与升级大致相同)某些路由配置已更改,或者进行了防火墙更改,或者实例所处的任何框已经进行了一些更改,因为它以不同方式处理您的内容。

如果您无法在您的环境中重现它,并且 100%确定它不是您的代码;那么逻辑上它只是他们的环境才是问题。

答案 2 :(得分:0)

Lads,就像更新一样,事实证明问题是VMWare在大量使用情况下相关 - 多么有趣的一周!我们正在改变代码以适应VMWare环境,我们已经看到了一些改进。

感谢您的建议,我很感激。