2

获取位于同一服务器上的 asp 页面的输出的正确方法是什么?

<%

GetUrl "/route/to/abc/123/"

Function GetUrl(url)
    Set objXMLHTTP = CreateObject("MSXML2.ServerXMLHTTP.3.0")
    objXMLHTTP.open "GET", URL, false
    objXMLHTTP.send()
    If objXMLHTTP.Status = 200 Then
        Response.Write objXMLHTTP.ResponseText
    End if
    Set objXMLHTTP = Nothing
End Function

%>

导致这个讨厌的错误。

msxml3.dll error '80004005'
Unspecified error
/test.asp, line 7

切换到更新的 serverxmlhttp

set objXMLHTTP = Server.CreateObject("MSXML2.ServerXMLHTTP.6.0")

揭示了一个不同的、更有意义的错误:

msxml6.dll error '80072ee6'
System error: -2147012890.
/test.asp, line 8

谷歌高兴地找到了一个理由,上面写着“不要使用 serverXmlHttp 连接到同一台服务器。(https://support.microsoft.com/en-us/kb/316451)你用什么?文章没有提供的不多。

无论如何很酷,我的错误是有正当理由的。但是你用什么来连接到同一个服务器,在经典的 asp 下,来捕获页面的输出?这篇文章(https://www.microsoft.com/technet/prodtechnol/WindowsServer2003/Library/IIS/aa23d158-000a-4ba2-8fe8-99895854d7f0.mspx?mfr=true)提到如果我在做隔离模式,那么进程与Web服务器进程分开运行,我不能使用SSI,我不知道如何首先启用它。反正听起来很恶心。SSI 在我的应用程序中很关键,所以我不能考虑。

我还剩下什么(除了显而易见的:抛弃 ASP)?生成一个 wscript.shell 命令提示符并将其从那里拉出来,回显到标准输出?从另一个反射器服务器反弹?格子

4

1 回答 1

0

您不能从在同一应用程序池下运行的网站请求网页。

有限数量的工作线程(在 Inetinfo.exe 或 Dllhost.exe 进程中)可用于执行 ASP 页。如果所有 ASP 工作线程都将 HTTP 请求发送回发送请求的服务器上的同一 Inetinfo.exe 或 Dllhost.exe 进程,则 Inetinfo.exe 或 Dllhost.exe 进程可能会死锁或停止响应(挂起),因为处理传入请求的工作线程池将被耗尽。这是设计使然。

如果单个递归请求导致 IIS 死锁,典型的原因是启用了 ASP 脚本调试。

解决方法:新建一个文件夹,把你的脚本放在这个文件夹里。之后在 IIS 中创建新的应用程序池并为此文件夹创建新的应用程序。

如何为某个文件夹创建新应用程序: 在此处输入图像描述

将文件夹分配给新应用程序池时的示例: 在此处输入图像描述

注意:不要尝试从同一个应用程序池下载网页的第 3 部分 DLL。结果将是相同的。使用一些免费的 http 组件进行了测试。

于 2015-06-14T19:38:24.407 回答