我有一个asp.net网页,它与SQL Server数据库交互,抓取一些数据,然后返回一个XML响应(我使用xml_curl将其提供给Freeswitch。
因为Freeswitch(FS从现在开始)不存储cookie,所以每个请求都会创建一个新会话。
当请求数量过多(大约97到100)时,SqlConnection.Open()方法从SQL Server实例获取超时,然后导致HTTP错误500.
为了测试我的假设,我使用PHP和cURL创建了一个小脚本,它向我的asp.net页面重复发出请求。如果我在PHP脚本中存储cookie(以及会话),我可以在近314秒内完成10000次成功请求。
但是如果没有会话,我会遇到大约97~100个请求,然后我得到HTTP错误500.
无论如何都要克服这个问题吗?
==编辑==
以下是我与数据库交互的方式:
String connectionString = WebConfigurationManager.ConnectionStrings["SqlServerConnection"].ConnectionString;
SqlConnection connection = new SqlConnection(connectionString);
SqlCommand command = connection.CreateCommand();
command.CommandType = CommandType.Text;
command.CommandText = "Select * from dbo.Template where Name = '" + name + "'";
Template template = new Template();
connection.Open();
SqlDataReader reader = command.ExecuteReader();
if (reader.HasRows)
{
reader.Read();
template.Name = reader["Name"].ToString();
template.XMLContent = reader["XMLContent"].ToString();
}
else
{
template.Name = "";
template.XMLContent = "";
}
reader.Close();
connection.Close();
return template;
模板表包含以下字段:
ID => int, identity, primary key
Name => nvarchar(255), unique
XMLContent => ntext
答案 0 :(得分:3)
您似乎正在使用连接池。默认情况下,这些池与SQL Server最多有100个连接,并为任何其他连接排队。队列具有超时(默认为15秒),如果您希望将请求排长时间,可以将其延长。这意味着您可能会在服务器上备份。如果SQL服务器可以处理它,您还可以增加池最大大小。
以下是增加连接设置的方法by adding these parameters:
答案 1 :(得分:1)
推广此代码的一些步骤。
name
使用一些缓存如果名称请求相同,请从缓存中获取,而不是打开数据库答案 2 :(得分:1)