ASP.NET Web API 在来自 Chrome 扩展程序的并发 AJAX 调用时崩溃



我有一个网站(ASP.NET MVC),我可以上传两个视频和可以调用 ASP.NET Web API的Chrome扩展程序。从Visual Studio在IIS下运行的网站和Web API都没有调试选项。

现在我上传了两个视频到我的 ASP.NET MVC 网站,扩展程序获得了两个上传视频的 URL。扩展设置为使用两个 AJAX 调用分别从 Web API 控制器调用相同的操作。两个AJAX调用都包装在setInterval中,一个间隔是1000ms,另一个是2000ms。

偶尔在 2-4 次来自 ajax Web API 的调用在 IIS 中崩溃后,同时在 Chrome 控制台中我可以看到一个net::ERR_CONNECTION_RESET错误,然后net::ERR_CONNECTION_REFUSED其他错误。

我尝试调试 Web API 并将我的操作代码放在try-catch块中,但它没有帮助,调试会话崩溃而没有任何异常消息或返回代码 -1 的错误。我也尝试搜索类似的问题,但没有找到任何东西。

阿贾克斯:

setInterval(function () {
$.ajax({
url: requestApiVideo1,
type: "GET",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: succFunc1,
error: errFunc
});
}, 1000);
setInterval(function () {
$.ajax({
url: requestApiVideo2,
type: "GET",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: succFunc2,
error: errFunc
});
}, 1000);

这绝对不是我从简单的 ajax 调用 Web API 时所期望看到的。 我希望Web API至少将并发的ajax请求放在队列中。

编辑: 这是我在事件查看器中找到的内容:

Faulting application name: iisexpress.exe, version: 10.0.14358.1000, time stamp: 0x574fb9e6.
Faulting module name: ucrtbase.dll, version: 10.0.17134.619, time stamp: 0xf74cf274
Exception code: 0xc0000409
Fault offset: 0x000000000006ca78
Faulting process id: 0x31d8
Faulting application start time: 0x01d4ef27c034cf15
Faulting application path: C:  Program Files  IIS Express  iisexpress.exe
Faulting module path: C:  WINDOWS  System32  ucrtbase.dll
Report Id: 76c3023e-f31b-412e-9c5c-07e9bb1180ba
Faulting package full name: 
Faulting package-relative application ID:

更新:我的 C# Web API 操作代码从 C++ dll 调用方法。

我在C++ dll模块中发现了内存泄漏。我 t 是一种没有正确释放分配内存的写入方法:

extern "C" __declspec(dllexport)
int writeToFile(const char * file1, const char * file2, const char * id) {
WavFile* originalFile = wav_file_api().init(file1, READ, 1024);
WavFile* signedFile = wav_file_api().init(file2, WRITE, 1024);
int16_t buffer[1024];
size_t read_size;
char sign[17];
sprintf_s(sign, 16, "%s", id);
sign[16] = 0;
signedFile->header = originalFile->header;
fwrite(&(signedFile->header), sizeof(WavHeader), 1, signedFile->file);
while ((read_size = wav_file_api().read_next_chunk(originalFile, buffer))) {
apply_sign(buffer, sign);
wav_file_api().write_next_chunk(signedFile, buffer);
}
wav_file_api().del(signedFile);
wav_file_api().del(originalFile);
return 1;
}

最新更新