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

使用XMLHTTPRequest调用ASP.NET MVC控制器时Classic ASP出现超时错误求助

解决Classic ASP调用ASP.NET MVC控制器时的msxml3.dll超时错误(80072ee2)

你已经精准定位到问题核心了——后台数据库查询耗时过长,导致Classic ASP侧在接收响应前触发超时。你现有的SetTimeouts和waitForResponse设置没生效,大概率是参数配置不匹配,或者忽略了ASP页面本身的超时限制,咱们一步步来解决:

1. 修正SetTimeouts参数的逻辑问题

MSXML2.ServerXMLHTTP的SetTimeouts四个参数顺序是:
resolveTimeout(域名解析超时)、connectTimeout(连接超时)、sendTimeout(发送数据超时)、receiveTimeout(接收响应超时)

你当前设置的receiveTimeout只有15秒(15000毫秒),这意味着即使你用waitForResponse(90)等待90秒,一旦超过15秒还没收到响应数据,就会直接触发超时错误。

把receiveTimeout调整为和前两个参数一致的10分钟(600000毫秒),确保接收响应的时间足够覆盖后台查询的耗时:

xmlHttp.SetTimeouts 600000, 600000, 600000, 600000

2. 增加ASP页面本身的脚本超时限制

Classic ASP默认的Server.ScriptTimeout是90秒,就算你的XMLHTTP请求设置了10分钟超时,如果ASP页面本身先到了90秒超时,还是会抛出错误。在你的ASP页面开头加上:

Server.ScriptTimeout = 600 ' 设置为10分钟,单位是秒

3. 优化异步请求的错误处理

你当前的代码只判断了waitForResponse的结果,但没有处理超时失败的情况,也没有检查响应状态。可以补充错误捕获和状态验证:

function getHTML (strUrl)
    Dim xmlHttp, http_response
    http_response = ""
    Set xmlHttp = Server.Createobject("MSXML2.ServerXMLHTTP.3.0")
    
    ' 先设置ASP页面超时
    Server.ScriptTimeout = 600
    
    ' 统一设置所有超时为10分钟
    xmlHttp.SetTimeouts 600000, 600000, 600000, 600000
    xmlHttp.Open "GET", strUrl, True
    xmlHttp.SetRequestHeader "Content-Type", "application/xml; charset=UTF-8"
    xmlHttp.SetRequestHeader "Accept", "application/xml; charset=UTF-8"
    
    On Error Resume Next ' 开启错误捕获
    xmlHttp.Send
    If Err.Number <> 0 Then
        getHTML = "ERROR: " & Err.Description
        set xmlHttp = Nothing
        Exit Function
    End If
    On Error Goto 0 ' 关闭错误捕获
    
    ' 等待响应,设置为10分钟(600秒)
    If xmlHttp.waitForResponse(600) Then
        ' 验证响应状态是否正常
        If xmlHttp.Status = 200 Then
            http_response = xmlHttp.responseText
        Else
            getHTML = "ERROR: Server returned status " & xmlHttp.Status
        End If
    Else
        getHTML = "ERROR: Request timed out"
    End If
    
    getHTML = "COMPLETED"
    set xmlHttp = Nothing
end function

4. 额外调试建议

  • 在你的ASP.NET MVC控制器中添加日志,记录每个请求的开始时间、结束时间,精确计算后台查询的实际耗时,这样可以更精准地设置超时值,避免过度设置。
  • 如果后台查询确实需要很长时间,考虑把它改成异步任务(比如用后台任务队列),让Classic ASP先拿到一个任务ID,之后轮询获取结果,而不是一直等待响应——这能从根本上避免长时间等待的超时问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.27 19:34:07