【发布时间】:2014-01-25 19:10:36
【问题描述】:
我有一个在 Windows Server 2012 机器上运行的经典 ASP 网站。一个页面使用如下代码通过 https 向另一个应用程序发出 HTTP 请求:
Sub ShopXML4http(url, inStr, outStr, method, xmlerror)
Dim objhttp
Set objhttp = Server.CreateObject ("MSXML2.ServerXMLHTTP.6.0")
objHttp.open method, url, false
If Method="POST" Then
objHttp.Send instr
Else
objHttp.Send
End if
outstr=objHttp.responseText
Set objhttp=nothing
End Sub
这段代码几乎在所有时间都可以正常工作(每天有数千个请求),但偶尔它会失败并显示如下消息:
号码:-2147012739
说明:安全通道支持发生错误
来源:msxml6.dll
该应用程序最近从旧的 Windows 2003 Server 移到了 2012 Server,而这个问题似乎从来不是旧服务器上的问题。此外,虽然网站上发生了这个错误,但我可以在 VBScript 中运行完全相同的代码,它工作正常。重置应用程序池似乎使站点能够再次执行安全 HTTP 请求(尽管它经常在我到达服务器之前自行修复)。
【问题讨论】:
-
我能够验证在同一个应用程序池中,我能够在 ASP.NET 页面代码隐藏中成功地执行完全相同的请求,而它在经典 ASP 页面中给出错误。
-
我刚刚尝试将经典 ASP 页面从 MSXML2.ServerXMLHTTP 对象转换为 WinHttp.WinHttpRequest.5.1。这同样适用于许多请求,但最终它也得到了安全通道支持错误。
-
现在我将站点从集成模式更改为经典模式,以使其运行起来更像 IIS 6。在过去的 24 小时内,该问题至少发生了两次。
-
我想这是低于 HTTP(S) 级别的网络问题。查看两台服务器上的系统、应用程序和安全事件日志。此外,如果可能,修改您的脚本以编写最简单的 txt 文件,使用“开始时间”(
open方法之前)和“停止时间”(send方法之后)。查看服务失败时的时差。还可以尝试调用setOption方法,值为SXH_OPTION_IGNORE_SERVER_SSL_CERT_ERROR_FLAGS- 我不相信这会有所帮助,但请尝试。 -
您发送的请求是否引用了运行脚本的同一台服务器?
标签: iis asp-classic xmlhttprequest windows-server-2012