c# - 对页面(与数据库交互)的多个无 session 请求导致 HTTP 错误 500

标签 c# asp.net sql-server

我有一个与 SQL Server 数据库交互的 asp.net 网页,抓取一些数据然后返回一个 XML 响应(我使用 xml_curl 将其输入 Freeswitch)。

因为 Freeswitch(从现在开始是 FS)不存储 cookie,所以每个请求都会创建一个新的 session 。

当请求数量过多(大约 97 到 100)时,SqlConnection.Open() 方法会从 SQL Server 实例超时,然后导致 HTTP 错误 500。

为了检验我的假设,我使用 PHP 和 cURL 创建了一个小脚本,它向我的 asp.net 页面发出重复请求。如果我在 PHP 脚本中存储 cookie(以及 session ),我可以在将近 314 秒内发出 10000 个成功请求。

但如果没有 session ,我会卡在大约 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

最佳答案

看来您正在使用连接池。默认情况下,这些池最多有 100 个连接到您的 SQL 服务器,并对任何额外的连接进行排队。队列有超时时间(默认 15 秒),如果您希望将请求排队更长的时间,可以延长该超时时间。这意味着您可能会在服务器上备份。如果您的 SQL 服务器可以处理,您还可以增加池的最大大小。

这是增加连接设置的方法 by adding these parameters:

  • 超时=60
  • 最大池大小=150
  • 等等等等

关于c# - 对页面(与数据库交互)的多个无 session 请求导致 HTTP 错误 500,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9161737/

相关文章:

sql-server - 为什么在删除虚拟帐户的登录后 SQL Server 继续工作

c# - 连接必须有效且打开(executeScalar())

c# - 'Emgu.CV.CvInvoke' 的类型初始值设定项抛出异常

C# WPF DataGrid 删除每个选定的项目

asp.net - 如何在 SQL Server 的 log4net 配置中使用存储过程进行日志记录

sql-server - 如何修复从 Visual Studio 到 Azure VM 中部署到 SQL Server 2014 的缓慢问题

c# - 使用 log4net 批量记录到 SQL Server

c# - 找不到类型或命名空间名称 'Column'

c# - 如何获取正在访问 ASP.NET 应用程序的当前用户?

asp.net - 如何在最新的 asp.net 5 中使用 serilog?