gpt4 book ai didi

Ajax http 500错误Azure不在本地

转载 作者:行者123 更新时间:2023-12-03 04:33:56 25 4
gpt4 key购买 nike

运行 ajax 请求时,我收到一条错误消息:

Failed to load resource: the server responded with a status of 500 (OK)

问题是服务器错误似乎没有发生。当我在本地计算机上运行应用程序但使用 azure 数据库时,我没有收到错误消息。只有已发布的 azure 应用程序才会生成此错误。我已经完成了远程调试,即使浏览器显示此错误,服务器仍会继续处理请求,几分钟后它会完成请求。就好像实际上没有服务器错误一样。

服务器大约需要 10 分钟才能完成请求。我相信这与请求很长这一事实有关(因为它适用于较小的数据库)。我知道 azure 对免费应用程序服务级别的 CPU 时间有限制,但我切换到基本(没有 cpu 时间限制),所以这应该不是问题。该请求的 SQL 强度非常大(大约 20k 个 SQL 查询)。

Ajax 调用:

  $.ajax({
async: true,
cache: false,
type: "POST",
url: FooURL,
contentType: 'application/json',
dataType: "json",
data: JSON.stringify(null),
success: function (error_message) {
$("#FooBar").removeClass("loading");
},
error: function(jqXHR, textStatus, errorThrown) {
console.log(textStatus, errorThrown);
}
});

Controller :

  [Authorize]
[RequireHttpsAttribute]
public class FooController : Controller
{
private FooBarModel foobarModel = new FooBarModel();

public ActionResult UpdateFooBarModel()
{
foobarModel.UpdateModel();
return Json("Success");
}

最佳答案

Azure 中显然存在空闲超时,描述为 here 。默认值设置为 4 分钟,如果您在 VM 上运行应用程序,则可以配置为最长 30 分钟。我通过在数据库中创建一个表来存储请求的当前状态来解决这个问题。

表:

CREATE TABLE [dbo].[MyTable] (
[UpdateNo] INT IDENTITY (1, 1) NOT NULL,
[AllDone] BIT DEFAULT ((0)) NOT NULL,
CONSTRAINT [MyTable$PrimaryKey] PRIMARY KEY CLUSTERED ([UpdateNo] ASC)

);

我没有直接调用该方法,而是创建一个任务并返回更新状态行的 ID。

public ActionResult UpdateFooBarModel()
{
int id = foobarModel.StartUpUpdate(); //Creates the status row
Task.Run(() => foobarModel.UpdateModel(id));
return Json(id);
}

public ActionResult GetUpdateStatus(int UpdateNo)
{
bool status = foobarModel.GetUpdateStatus(UpdateNo);
return Json(status);
}

Ajax 调用:

function check_status(StatusId) {
$.ajax({
async: true,
cache: false,
type: "POST",
url: GetUpdateStatusURL + "/?UpdateNo=" + StatusId,
contentType: 'application/json',
dataType: "json",
success: function (StatusDone) {
if (StatusDone == true) {
console.log("Update done!");
$("#FooBar").removeClass("loading");
} else {
console.log("Not done!")
setTimeout(function () {
check_status(StatusId);
}, 5000); //Check every 5 seconds
}
},
error: function (jqXHR, textStatus, errorThrown) {
console.log(textStatus, errorThrown);
}
});

}

关于Ajax http 500错误Azure不在本地,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31070901/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com