You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何避免ASPX页面中JavaScript调用同一WebMethod 100次后卡住?

解决ASPX页面AJAX重复调用WebMethod 100次后卡住的问题

核心原因

Chrome/Edge等浏览器对同一域名的并发HTTP连接数有默认限制(通常为6个),若AJAX请求未正确释放连接、或请求堆积超过连接池上限,会导致后续请求排队甚至卡住。此外服务器端的资源泄漏、线程池耗尽也会加剧该问题。

具体解决方案

1. 确保请求完成后再发起下一次调用

放弃setInterval(不管上一次请求是否完成都会发送新请求,容易造成请求堆积),改用在请求完成回调中触发下一次调用,避免占用过多连接池资源:

function MyAjaxFunc() {
    $.ajax({
        type: "POST",
        url: "YourPage.aspx/TargetWebMethod",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        data: JSON.stringify({ /* 传入请求参数 */ }),
        success: function(res) {
            // 处理返回结果逻辑
        },
        error: function(xhr, status, err) {
            // 处理请求错误逻辑
        },
        complete: function() {
            // 上一次请求完全结束后,延迟发起下一次调用
            setTimeout(MyAjaxFunc, 5000);
        }
    });
}

// 初始化调用
MyAjaxFunc();

2. 服务器端开启异步WebMethod

给WebMethod添加Async=true标记,让服务器端异步处理请求,避免线程池被耗尽:

using System.Threading.Tasks;
using System.Web.Services;

[WebMethod(Async = true)]
public static async Task<string> TargetWebMethod() {
    // 用await执行异步操作,比如数据库查询、第三方API调用
    await Task.Delay(100); // 示例异步逻辑
    return "处理完成";
}

3. 清理服务器端资源

确保WebMethod内的所有资源(数据库连接、文件流等)都正确释放,用using语句自动回收资源,避免资源泄漏导致后续请求无法处理:

[WebMethod]
public static string TargetWebMethod() {
    using (var dbConn = new SqlConnection("你的数据库连接字符串")) {
        dbConn.Open();
        // 执行数据库操作逻辑
    } // using代码块结束后自动关闭并释放连接
    return "Success";
}

4. 设置请求超时与错误重试

给AJAX请求设置超时时间,防止请求长期挂起占用连接;同时在错误回调中添加重试逻辑,处理网络波动导致的请求失败:

$.ajax({
    // 其他配置项
    timeout: 10000, // 设置10秒超时
    error: function(xhr, status, err) {
        if (status === "timeout") {
            // 超时后可选择重试或记录日志
            setTimeout(MyAjaxFunc, 2000);
        }
    }
});

内容的提问来源于stack exchange,提问作者Siyon DP

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 06:10:20