9

我们刚刚搬到了一个新的具有 Windows 2008 和 SQL Server 2008 的专用服务器。我正在尝试使用Server.CreateObject("MSXML2.ServerXMLHTTP").

在我们之前的 2003 服务器上,这可以正常工作,但是对于新的 2008 服务器,操作只是超时。

这是代码:

strURL = "http://www.storeboard.com/profile/profile_view.asp?MemberID=" & MemberID & "&sid=" & cSession.SessionID
Set oXMLHttp = Server.CreateObject("MSXML2.ServerXMLHTTP")
oXMLHttp.open "GET", strURL, false
oXMLHttp.send()
IF oXMLHttp.status = 200 THEN 
  strOut = oXMLHttp.responseText
ELSE
  strOut  = "Could not get XML data."
END IF
Set oXMLHttp = nothing

代码非常简单,但我收到以下错误:

msxml3.dll error '80072ee2'

The operation timed out

/handle404.asp, line 291 

第 291 行是指 oXMLHttp.Send() 行。

我可以使用其他代码吗?我在服务器上的其他地方使用脚本来访问其他服务器上的文件,它们可以正常工作,但是对我们服务器上文件的任何访问都不起作用。

是否有其他方法可以让我在浏览器中保持 URL 不变?该人可以在他们的浏览器中编写 URL:http://www.example.com/hello该文件不存在,但我有一个 404 处理程序,然后将用户指向正确的路径,而无需更改浏览器 URL,这是必不可少的对于我们的 SEO 评级。

4

3 回答 3

12

Microsoft 发布了一篇题为INFO 的知识库文章:不要将 ServerXMLHTTP 或 WinHTTP 请求发送到同一服务器

如果 ServerXMLHTTP 或 WinHTTP 组件必须向同一服务器上的另一个 ASP 发送请求,则目标 ASP 必须位于不同的虚拟目录中并设置为高度隔离运行。避免使用 ServerXMLHTTP 或 WinHTTP 向位于同一虚拟目录中的 ASP 发送请求。

...

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

就替代方案而言,这取决于您在收到回复后如何处理。如果脚本的全部目的是将请求转发到 profile_view.asp,您也许可以Server.Transfer改用。

于 2011-11-22T03:45:22.623 回答
4

我有同样的问题。在我的情况下,我试图发出的网络请求是一个内部站点 URL(在同一个应用程序池中)。启用服务器端调试后,asp 应用程序池似乎仅限于单个工作线程。通过禁用此功能,可以处理请求。

于 2012-05-16T10:28:01.227 回答
3

msxml3.dll 已经很老了。它与 Internet Explorer 6 一起分发,以便为您提供一个粗略的想法。

您可以让某人在服务器上安装更高版本吗?

http://support.microsoft.com/kb/269238为您提供了版本列表以发送给负责服务器的任何人。

如果问题真的归结为超时,您可以考虑关闭 ASP 缓冲。(这基于一个猜测,即如果服务器对象开始接收响应,它将在超时前推迟。

或者,您可以尝试在客户端处理值,下面是我编写的一些代码中的一个函数......

function getDets(RateID) {
    var xmlHttp;
    try {
        xmlHttp=new XMLHttpRequest();    // Firefox, Opera 8.0+, Safari
    }
    catch (e) {
        try {
        // Internet Explorer
        xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
        }
        catch (e) {
            try {
            xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
            }
            catch (e) {
                alert("Your browser does not support AJAX!");
                return false;
            }
        }
    }
    xmlHttp.onreadystatechange=function()
    {
        if(xmlHttp.readyState==4) {
        var str;
        var newStr;
        str=xmlHttp.responseText
        newStr=str.split("|");
        window.document.all.OR2.style.display="block";
        window.document.all.OR3.style.display="block";    
        window.document.OvertimeRates.Description.value=newStr[0];
        window.document.OvertimeRates.Factor.value=newStr[1];
        }
    }
    if (RateID==0) {
        window.document.OvertimeRates.Description.value="";
        window.document.OvertimeRates.Factor.value="";
    }
    else {
        xmlHttp.open("GET","GetOvertimeRate.asp?RateID="+RateID,true);
        xmlHttp.send(null);
    }
}

祝你好运!

于 2011-07-21T22:10:43.320 回答