我们有一个ASP.NET MVC应用程序,它使用与iSeries的DB2连接来获取用户设置。我们在4个Windows 2008 R2 SP1服务器的Web场上托管该站点。
有时,来自其中一个服务器的对DB2的任何查询都将失败并显示消息"发生通信错误"。此外,当发生此通信错误时,该服务器有时无法从我们的会话状态服务器获取用户会话错误"无法向会话状态服务器发出会话状态请求..."。但它会在此事件期间定期与不同的服务器进行SQL Server查询通信。服务器场中的其他3台服务器都很好,如果我们重新启动问题服务器,它将恢复正常。
查看事件查看器没有显示服务器突然出现通信问题的原因。服务器指标也看起来正常。该问题在4台服务器中的任何一台上间歇性地发生。这种情况在几个月前就开始发生,并且在过去几周内更频繁地发生。之前,我们使用当前的设置运行了多年,并确信代码中的任何更改都不会影响这一点。任何关于问题可能是什么或如何排除故障的帮助将不胜感激。这是我们的代码段,如果有任何帮助
using (var cn = new iDB2Connection("ConnectionTimeout=45;Pooling=true;MinimumPoolSize=1;MaximumPoolSize=-1;MaximumUseCount=100;CheckConnectionOnOpen=true;DataSource=XXX;Naming=SQL;DataCompression=True;UserID=XXX;password=XXX;"))
{
try
{
cn.Open();
using (var cmd = new iDB2Command(query, cn))
{
//execute reader
}
}
catch (Exception ex)
{
//generate error email
}
finally
{
if (cn.State != ConnectionState.Closed)
{
cn.Close();
}
}
}