MSXML2.ServerXMLHTTP.6.0的.send方法在IIS经典ASP环境下报错排查
问题描述
本地运行以下ASP代码正常,但部署到开发服务器后,调用MSXML2.ServerXMLHTTP.6.0的.Send方法时出现错误-2147483638,错误描述为“完成此操作所需的数据尚未可用”,预期.Send方法可正常工作。
url = "https://auth.hstream.net/oauth2/token" data = "grant_type=client_credentials" Function PostTextFromUrl(url,authToken,data) On Error Resume Next Dim oXMLHTTP Dim sHTTPResponse, sHTTPStatus Set oXMLHTTP = Server.CreateObject("MSXML2.ServerXMLHTTP.6.0") oXMLHTTP.SetProxy 1 oXMLHTTP.SetTimeouts 600000, 600000, 600000, 600000 oXMLHTTP.Open "POST", url, False oXMLHTTP.setRequestHeader "Authorization", authToken oXMLHTTP.setRequestHeader "Content-Type", "application/x-www-form-urlencoded" oXMLHTTP.Send data response.write (Err.Number) response.write (Err.description) response.write (oXMLHTTP.status) sHTTPStatus = oXMLHTTP.status sHTTPResponse = oXMLHTTP.responseText If Err.Number = 0 and sHTTPStatus = "200" and sHTTPResponse <> """{}""" Then PostTextFromUrl = sHTTPResponse Else PostTextFromUrl = HTTPErrorHandeler (HTTPStatus, HTTPResponse) End If On Error Goto 0 Set oXMLHTTP = Nothing Set oXMLHTTP = Nothing End Function
可能的服务器差异原因
- 网络访问限制:开发服务器可能处于内网环境,无法直接访问外部HTTPS地址
https://auth.hstream.net;或者代码中SetProxy 1使用的默认代理配置不正确(比如代理地址/端口未设置、代理需身份验证但未配置),导致请求无法获取响应数据。 - 组件权限或注册问题:开发服务器上的
MSXML2.ServerXMLHTTP.6.0组件未正确注册,或者IIS应用程序池的运行账户没有该组件的访问权限,本地环境则已完成注册并赋予权限。 - SSL证书信任问题:目标地址为HTTPS,开发服务器的根证书存储中没有信任该站点的CA证书,或者站点证书过期、自签名,导致SSL连接建立失败,无法获取响应。
- 安全软件/防火墙拦截:开发服务器上的防火墙、入侵检测系统或安全软件拦截了出站HTTPS请求,限制了对443端口的访问,导致请求提前终止,触发数据不可用错误。
- 超时配置不匹配:虽然代码设置了600秒超时,但服务器网络环境比本地差,实际请求耗时超过了底层系统或网络设备的超时限制,请求被提前中断。
- 编码格式差异:服务器系统编码与本地不同,导致
data参数的编码不符合目标服务器要求,请求发送后未得到有效响应。
内容的提问来源于stack exchange,提问作者Spottedbass
相关产品推荐
相关产品推荐

