内部服务器错误 - 在 MVC4 中同时发出 AJAX 请求时出现 500 ASP.NET
本文关键字:请求 AJAX NET ASP 服务器 MVC4 内部 错误 | 更新日期: 2023-09-27 18:25:13
function InitializeCharts() {
for (var i = 0; i < arguments.length; i++) {
compName = arguments[i];
$.ajax({
async:true,
timeout: 60000,
dataType: "json",
url: "/SalesDashboard/GetChartData",
data: { company: compName, from: startDate, to: endDate },
success: (function () {
var cmp = compName;
return function (data) {
ChartData[cmp] = data;
PrepareChart(data, cmp);
};
})(),
error: function (xhr, ajaxOptions, thrownError) {
console.log(xhr.status+': '+xhr.statusText);
console.log(thrownError);
}
});
}
}
我在客户端使用上述函数发出 AJAX 请求并获取一些数据。当我像这样调用函数时,它工作正常:
InitializeCharts("ABC"); // A Single parameter
它适用于单个请求,但是当我传递多个参数时,如下所示,它会创建多个同时请求并给我">内部服务器错误-500"错误。
InitializeCharts("ABC", "BBC", "CCC", "DDD", "EEE", "ACD", "CBD", "CDS", "ADB"); // Multiple parameters
它给了我几个随机公司的错误,有时是两家,有时是三四家。我尝试将 AJAX 请求中的超时增加到 60000,但它不起作用。我还通过 IIS 服务器并将连接超时增加到 3 分钟,但仍然得到相同的响应。我知道甚至不需要一分钟就可以将数据返回给客户端。如果我将 ajax 请求中的">异步"值设置为 false,它可以工作,但会阻止 UI,直到为所有公司返回数据。
以下是我的服务器端代码:
static int hitCount = 0;
private string ConnectionString = "server=localhost;database={0};uid=test;password=test;pooling=false;";
private string QueryString_Daily = "SELECT Day(mergefiledate) AS `Date`, COUNT(order_no) AS `Count` FROM orders_new WHERE DATE(mergefiledate)>='{0}' and Date(mergefiledate)<='{1}' GROUP BY DATE(mergefiledate);";
public Task<string> GetChartData(string company, string from, string to)
{
hitCount++;
return Task.Factory.StartNew(() => GetData(company, from, to));
}
private string GetData(string company, string from, string to)
{
string QuerySTR = string.Empty;
QuerySTR = string.Format(QueryString_Daily, startDt.ToString("yyyy-MM-dd"), endDt.ToString("yyyy-MM-dd"));
MySqlConnection mycon = new MySqlConnection(string.Format(ConnectionString, company));
MySqlCommand cmd = new MySqlCommand(QuerySTR, mycon);
cmd.CommandTimeout = 0;
DataTable dt = new DataTable();
try
{
mycon.Open();
}
catch (Exception ex)
{
Response.Write("<script>alert('Database connection error, please try again. ERROR_DETAILS: '" + ex.Message + "');</script>");
return null;
}
if (mycon.State == ConnectionState.Open)
{
MySqlDataAdapter da = new MySqlDataAdapter(cmd);
da.Fill(dt);
}
if (mycon.State == ConnectionState.Open)
{
try
{
mycon.Close();
}
catch { }
}
if (dt.Rows.Count > 0)
{
var result = Newtonsoft.Json.JsonConvert.SerializeObject(dt);
return result;
}
else
{
return null;
}
}
我一直试图通过谷歌搜索找出解决方案,挖掘 stackoverflow.com......等等,但还没有运气。非常感谢帮助,提前非常感谢。
非常感谢大家的努力。我得到了解决方案。我的印象是我已经使用以下语句将命令超时设置为无限,但实际上我错了:
cmd.CommandTimeout = 0;
我将超时修改为:
cmd.CommandTimeout = 600;
它工作得很好。再次感谢每一个小帮助。