超时错误,跪求解决方法

cpcy2009 2010-04-26 05:58:07
类别:Web Event程序 来源ASP.NET 2.0.50727.0 类型:警告 事件ID:1309

我的网站经常出现如下信息,一天能有三四次
Server Error ,Timeout expired, all pooled connections were in use and max pool size was reached

在web.config中将连接池最大调到512,Max Pool Size = 512,依然会出现上面信息,
在web.config中将连接池设置为pooling=false,还会出现上面信息,

IIS连接数无限制,SQL并发连接数设为0,无限制,依然不起做用,

检查程序,并没有存在不关闭的情况。

有一次,在出现错误信息客户登陆不上的时候,我用本机的网站程序连接远程数据库,可以正常使用网站!
今天我又做了一个测试,只要修改下web.config,哪怕是删除一个空格后存盘,或者改下这个文件名,再改回去,网站就好用了 ,

我实在是一点办法也没有了,请哪位高帮忙看下,非常感谢!!!!!!!!!!!!
...全文
275 25 打赏 收藏 转发到动态 举报
写回复
用AI写文章
25 条回复
切换为时间正序
请发表友善的回复…
发表回复
cpcy2009 2010-05-01
  • 打赏
  • 举报
回复
是服务商的问题,我已经知道答案了,是微软公司的BUG问题引起的,不过。NET2。0不能升级而补丁程序了现在只有换掉它了!谢谢大家的帮助!
jshi123 2010-04-29
  • 打赏
  • 举报
回复
public DataRow GetDataRow(string strSQL)
public DataView GetDataView(string strSQL)
这两个方法都没关闭连接
缪军 2010-04-29
  • 打赏
  • 举报
回复
你都有钱租用虚拟服务器了,
为什么不自己购置一台1u,托管呢?
你这样的应用,硬件需求不高啊.
总之,如果是服务商的问题,就责成他们尽快解决,否则更换服务商,或者干脆服务器托管或者自建
cpcy2009 2010-04-28
  • 打赏
  • 举报
回复
经确认,另一台跑IIS,数据库放在出问题的主机上,没问题,

看来应该是出问题的主机系统的事,和数据库及网站程序无关!

我租的VPS装的是
windows2003server(64位的)+asp环境(32位或64位不太清楚)+.net2。0环境(由64位转成了32位的,要不无法使用)环境+IIS6.0
运行两个网站,其中一个是asp+access
另一个是asp.net2.0+mssql
请大家多帮帮忙,我水平有限,这个太难了!
cpcy2009 2010-04-27
  • 打赏
  • 举报
回复
Exception message: Timeout expired. The timeout period elapsed prior to obtaining a connection from the pool. This may have occurred because all pooled connections were in use and max pool size was reached.
上面是系统报告的错误信息
事件里说应用连接池已满,我在网上查了大部分关于此问题的解决方法,也一一做了试验,都不管用,
而且网上大部分都说连接池为MSSQL数据库的连接池,有没有可能上面的错误信息是针对.NET2.0的应用程序池,而产生的,就是IIS的应用程序池连接已满!
porschev 2010-04-27
  • 打赏
  • 举报
回复
检查所有联接。。。。确保关闭。。

也可能是服务器问题。。。
cpcy2009 2010-04-27
  • 打赏
  • 举报
回复
Event code: 3005
Event message: An unhandled exception has occurred.
Event time: 2010-4-27 1:48:26
Event time (UTC): 2010-4-26 17:48:26
Event ID: 60dc12e136824e5487a39621edba17f7
Event sequence: 324
Event occurrence: 6
Event detail code: 0

Application information:
Application domain: /LM/W3SVC/537695094/Root-3-129167642638345336
Trust level: Full
Application Virtual Path: /
Application Path: D:\vpsweb\localuser\vpsguanli\
Machine name: GH01VPSI

Process information:
Process ID: 89064
Process name: w3wp.exe
Account name: NT AUTHORITY\NETWORK SERVICE

Exception information:
Exception type: Exception
Exception message: Timeout expired. The timeout period elapsed prior to obtaining a connection from the pool. This may have occurred because all pooled connections were in use and max pool size was reached.

Request information:
Request URL: http://IP/index.aspx
Request path: /index.aspx
User host address: 220.181.7.66
User:
Is authenticated: False
Authentication Type:
Thread account name: NT AUTHORITY\NETWORK SERVICE

Thread information:
Thread ID: 5
Thread account name: NT AUTHORITY\NETWORK SERVICE
Is impersonating: False
Stack trace: at DBManager.GetDataView(String strSQL)
at index.Page_Load(Object sender, EventArgs e)
at System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e)
at System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e)
at System.Web.UI.Control.OnLoad(EventArgs e)
at System.Web.UI.Control.LoadRecursive()
at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)


Custom event details:
lester19872007 2010-04-27
  • 打赏
  • 举报
回复
如果你使用了transaction,一定要commit 或者rollback才行。
周公 2010-04-27
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 peter200694013 的回复:]

可能因为你使用连接时只打开不关闭造成,应注意:
1.每次数据库操作完成后,立刻关闭数据库连接.否则连接池耗尽。
2.如果用了transaction,一定要commit或者rollback才行。
[/Quote]
1.并且确保即使发生了异常,数据库连接也会得到关闭。
修改了web.config文件会导致ASP.NET应用程序自动重启,那么以前的那些异常就会被清除了。
缪军 2010-04-27
  • 打赏
  • 举报
回复
1、网站故障时,你用自己笔记本的web服务能连接数据库,
你修改了webconfig,站点实际上重启了,
这说明故障发生在web服务器,不是sqlserver;

2、你可以找另一台电脑跑IIS,数据库不变,测试1到2天就知道是代码问题还是系统问题了

cpcy2009 2010-04-27
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 microtry 的回复:]
1、网站故障时,你用自己笔记本的web服务能连接数据库,
你修改了webconfig,站点实际上重启了,
这说明故障发生在web服务器,不是sqlserver;

2、你可以找另一台电脑跑IIS,数据库不变,测试1到2天就知道是代码问题还是系统问题了
[/Quote]

我按照此方法,准备要一步步检测了!感谢楼上的朋友们,我会第一时间把检测结果在这发步的,希望大家能够利用有限的业余时间帮帮忙!感谢了!
efreer2 2010-04-27
  • 打赏
  • 举报
回复
链接保持时间在config里,加长些。就好了 。。











www.jinanesf.com
cpcy2009 2010-04-27
  • 打赏
  • 举报
回复
<?xml version="1.0"?>
<configuration>
<appSettings>
<!--设置system目录的相对路径,请相对于web.config文件所在的目录(设置这个属性以后,该虚拟目录下所有级别目录页面的控件调用都不用单独设置systemfolder属性,方便项目的整体调用)-->
<add key="systemfolder" value="DotNetTextBox/system_dntb/"/>
<!--设置皮肤目录的相对路径,请相对于system目录(设置这个属性以后,该虚拟目录下所有级别目录页面的控件调用都不用单独设置skin属性,方便项目的整体调用)-->
<add key="skin" value="skin/XP/"/>
<add key="ServerName" value="."/>
<add key="DataBase" value="数据库"/>
<add key="UserName" value="sa"/>
<add key="PassWord" value="密码"/>
</appSettings>
<connectionStrings>
<add name="cpcy" connectionString="Data Source=.;Initial Catalog=数据库;Integrated Security=True;" providerName="System.Data.SqlClient"/>
</connectionStrings>
cpcy2009 2010-04-27
  • 打赏
  • 举报
回复
public bool SearchTable(string strSQL)
{
SqlDataReader OleDr = null;
try
{
openConnection();
comm.CommandText = strSQL;
comm.CommandType = CommandType.Text;
OleDr = comm.ExecuteReader(CommandBehavior.CloseConnection);
if (OleDr.Read())
{

return true;
}
else
{

return false;
}
}
catch
{
try
{
OleDr.Close();
closeConnection();
}
catch
{
}
return false;
}
finally
{
if (OleDr != null)
OleDr.Close();
}

}
/// <summary>
/// 返回指定Sql语句的DataSet
/// </summary>
/// <param name="sqlstr">传入的Sql语句</param>
/// <param name="ds">传入的引用DataSet对象</param>
public void DataSet(string sqlstr, ref DataSet ds)
{
SqlDataAdapter da = new SqlDataAdapter();
try
{
openConnection();
comm.CommandType = CommandType.Text;
comm.CommandText = sqlstr;
da.SelectCommand = comm;
da.Fill(ds);
}
catch (Exception e)
{
throw new Exception(e.Message);
}

finally
{
closeConnection();
}
}
/// <summary>
/// 返回指定Sql语句的DataTable
/// </summary>
/// <param name="sqlstr">传入的Sql语句</param>
/// <returns>DataTable</returns>
public DataTable DataTable(string sqlstr)
{
SqlDataAdapter da = new SqlDataAdapter();
DataTable datatable = new DataTable();
try
{
openConnection();
comm.CommandType = CommandType.Text;
comm.CommandText = sqlstr;
da.SelectCommand = comm;
da.Fill(datatable);
}
catch (Exception)
{
}
finally
{
closeConnection();
}
return datatable;
}

/// <summary>
/// 执行指定Sql语句,同时给传入DataTable进行赋值
/// </summary>
/// <param name="sqlstr">传入的Sql语句</param>
/// <param name="dt">ref DataTable dt </param>
public void DataTable(string sqlstr, ref DataTable dt)
{
SqlDataAdapter da = new SqlDataAdapter();
try
{
openConnection();
comm.CommandType = CommandType.Text;
comm.CommandText = sqlstr;
da.SelectCommand = comm;
da.Fill(dt);
}
catch (Exception e)
{
throw new Exception(e.Message);
}
finally
{
closeConnection();
}
}

/// <summary>
/// 执行指定Sql语句
/// </summary>
/// <param name="sqlstr">传入的Sql语句</param>
public DataView DataView(string sqlstr)
{
SqlDataAdapter da = new SqlDataAdapter();
DataView dv = new DataView();
DataSet ds = new DataSet();
try
{
openConnection();
comm.CommandType = CommandType.Text;
comm.CommandText = sqlstr;
da.SelectCommand = comm;
da.Fill(ds);
dv = ds.Tables[0].DefaultView;
}
catch (Exception e)
{
throw new Exception(e.Message);
}
finally
{
closeConnection();
}
return dv;
}

/// <summary>
/// 执行指定Sql语句,开始记录位置,和返回记录数
/// </summary>
/// <param name="sqlstr">传入的Sql语句</param>
/// <param name="StartIndex">开始记录位置</param>
/// <param name="pageSize">返回记录数</param>
public DataView DataView(string sqlstr, int StartIndex, int pageSize)
{
SqlDataAdapter da = new SqlDataAdapter();
DataView dv = new DataView();
DataSet ds = new DataSet();
try
{
openConnection();
comm.CommandType = CommandType.Text;
comm.CommandText = sqlstr;
da.SelectCommand = comm;
da.Fill(ds, StartIndex, pageSize, "pagelist");
dv = ds.Tables["pagelist"].DefaultView;
}
catch (Exception e)
{
throw new Exception(e.Message);
}
finally
{
closeConnection();
}
return dv;
}


//读某一行中某一字段的值
public string Readstr(string strSql, int flag)
{
string ST_str;
DataSet dataSet = new DataSet();
SqlDataAdapter dataAdapter = new SqlDataAdapter(strSql, conn);
try
{
openConnection();
dataAdapter.Fill(dataSet);
if (dataSet.Tables[0].Rows.Count > 0)
ST_str = dataSet.Tables[0].Rows[0].ItemArray[flag].ToString();
else
ST_str = "";
}
catch (Exception e)
{
throw new Exception(e.Message);
}
finally
{
closeConnection();
}
return ST_str;
}
}
cpcy2009 2010-04-27
  • 打赏
  • 举报
回复
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Text.RegularExpressions;
using System.Data.SqlClient;

public class DBManager
{
protected SqlConnection conn = new SqlConnection();
protected SqlCommand comm = new SqlCommand();

public DBManager()
{
//
// TODO: 在此处添加构造函数逻辑
//
}

/// <summary>
/// 打开数据库连接
/// </summary>
private void openConnection()
{
if (conn.State == ConnectionState.Closed )
{
conn.ConnectionString = ConfigurationManager.ConnectionStrings["cpcy"].ToString();
comm.Connection = conn;
try
{
conn.Open();
}
catch (Exception e)
{
throw new Exception(e.Message);
}
}
}
/// <summary>
/// 关闭当前数据库连接
/// </summary>
private void closeConnection()
{
if (conn.State == ConnectionState.Open)
conn.Close();
conn.Dispose();
comm.Dispose();
}
/// <summary>
/// 执行Sql查询语句
/// </summary>
/// <param name="sqlstr">传入的Sql语句</param>
public void ExecuteSql(string sqlstr)
{
try
{
openConnection();
comm.CommandType = CommandType.Text;
comm.CommandText = sqlstr;
comm.ExecuteNonQuery();
}
catch (Exception e)
{
throw new Exception(e.Message);
}
finally
{
closeConnection();
}
}

/// <summary>
/// 执行Sql更新语句
/// </summary>
/// <param name="sqlstr">传入的Sql语句</param>
/// <returns>布尔值</returns>
public bool ExecuteUpdate(string sqlstr)
{
int isUpdateOk = 0;
try
{
openConnection();
comm.CommandType = CommandType.Text;
comm.CommandText = sqlstr;
isUpdateOk = Convert.ToInt32(comm.ExecuteNonQuery());
}
catch (Exception e)
{
throw new Exception(e.Message);
}
finally
{
closeConnection();
}
if (isUpdateOk > 0)
{
return true;
}
else
{
return false;
}
}

public DataRow GetDataRow(string strSQL)
{
//查询数据,取得数据行
try
{
openConnection();
SqlDataAdapter OleAdp = new SqlDataAdapter(strSQL, conn);
DataSet Rs = new DataSet();
OleAdp.Fill(Rs);
if (Rs.Tables[0].Rows.Count != 0)
return Rs.Tables[0].Rows[0];
else
return null;
}
catch
{
return null;
}

}

public DataView GetDataView(string strSQL)
{
//查询数据,取得数据视图
try
{
openConnection();
SqlDataAdapter OleAdp = new SqlDataAdapter(strSQL, conn);
DataSet Rs = new DataSet();
OleAdp.Fill(Rs);
return Rs.Tables[0].DefaultView;
}
catch (Exception e)
{
throw new Exception(e.Message);
}
}

public string SearchValue(string strSQL)
{
//查找
SqlDataReader OleDr = null;
try
{
openConnection();
comm.CommandText = strSQL;
comm.CommandType = CommandType.Text;
OleDr = comm.ExecuteReader(CommandBehavior.CloseConnection);
if (OleDr.Read())
{
return OleDr[0].ToString();
}
else
return "";
}
catch
{
try
{
OleDr.Close();
closeConnection();
}
catch
{
}
return "";
}
finally
{
if (OleDr!=null)
OleDr.Close();
}
}
public void FillDwList(DropDownList ddlist, string strqry)
{
//用SQL语句填充下拉列表
try
{
DataView dv = GetDataView(strqry);
ddlist.DataValueField = dv.Table.Columns[0].Caption.ToString();
ddlist.DataTextField = dv.Table.Columns[1].Caption.ToString();
ddlist.DataSource = dv;
ddlist.DataBind();
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
}

public void FillDwList1(DropDownList ddlist, string strqry)
{
//用SQL语句填充下拉列表
try
{
DataView dv = GetDataView(strqry);
ddlist.DataValueField = dv.Table.Columns[0].Caption.ToString();
ddlist.DataTextField = dv.Table.Columns[0].Caption.ToString();
ddlist.DataSource = dv;
ddlist.DataBind();
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
}

/// <summary>
/// 执行Sql查询语句并返回第一行的第一条记录,返回值为object 使用时需要拆箱操作 -> Unbox
/// </summary>
/// <param name="sqlstr">传入的Sql语句</param>
/// <returns>object 返回值 </returns>
public object ExecuteScalar(string sqlstr)
{
object obj = new object();
try
{
openConnection();
comm.CommandType = CommandType.Text;
comm.CommandText = sqlstr;
obj = comm.ExecuteScalar();
}
catch (Exception e)
{
throw new Exception(e.Message);
}
finally
{
closeConnection();
}
return obj;
}

public DataSet GetDataSet(string strSql, string tableName)
{
DataSet dataSet = new DataSet();
SqlDataAdapter dataAdapter = new SqlDataAdapter(strSql, conn);
try
{
openConnection();
dataAdapter.Fill(dataSet, tableName);
}
catch (Exception e)
{
throw new Exception(e.Message);
}
finally
{
closeConnection();
}
return dataSet;
}

/// <summary>
/// 返回指定Sql语句的DataSet
/// </summary>
/// <param name="sqlstr">传入的Sql语句</param>
/// <returns>DataSet</returns>
public DataSet DataSet(string sqlstr)
{
DataSet ds = new DataSet();
SqlDataAdapter da = new SqlDataAdapter();
try
{
openConnection();
comm.CommandType = CommandType.Text;
comm.CommandText = sqlstr;
da.SelectCommand = comm;
da.Fill(ds);
}
catch (Exception e)
{
throw new Exception(e.Message);
}
finally
{
closeConnection();
}
return ds;
}

public double getTestCount(string sqlstr)
//取得总数
{
try
{
openConnection();
comm.CommandType = CommandType.Text;
comm.CommandText = sqlstr;
double count = double.Parse(comm.ExecuteScalar().ToString());
return count;
}
catch (Exception e)
{
throw new Exception(e.Message);
}
finally
{
closeConnection();
}
}

public int getCount(string sqlstr)
//取得总数
{
try
{
openConnection();
comm.CommandType = CommandType.Text;
comm.CommandText = sqlstr;
int count = int.Parse(comm.ExecuteScalar().ToString());
return count;
}
catch (Exception e)
{
throw new Exception(e.Message);
}
finally
{
closeConnection();
}
}

zhulong1111 2010-04-27
  • 打赏
  • 举报
回复
把连接数据库的方法贴两个出来!
cpcy2009 2010-04-27
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 microtry 的回复:]
1、网站故障时,你用自己笔记本的web服务能连接数据库,
你修改了webconfig,站点实际上重启了,
这说明故障发生在web服务器,不是sqlserver;

2、你可以找另一台电脑跑IIS,数据库不变,测试1到2天就知道是代码问题还是系统问题了
[/Quote]

iis上有两个网站,一个是用asp+access做的,跑两年了,一点问题没有
说明IIS应该没有问题,
而新版网站是asp.net2.0+mssql的,MSSQL没问题的话,那问题应该出在asp.net2.0
而事件上的错误也确是由它发出的。
来源ASP.NET 2.0.50727.0 类别:Web Event程序 类型:警告 事件ID:1309
  • 打赏
  • 举报
回复
贴出一两个DBManager中的方法,让我们瞻仰一下。
cpcy2009 2010-04-26
  • 打赏
  • 举报
回复
我用远程桌面登陆服务器,CPU,内存,带宽使用率都不高
现网站还没对外公开的,只有上传资料的两个人员在用呢
加上我几乎就三个人每天登陆网站,还有搜索爬虫
zhouzangood 2010-04-26
  • 打赏
  • 举报
回复
mark
加载更多回复(5)

62,041

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧