ASP页面中的msxml3.dll错误'80072ee2'

9
我们刚刚转移到了一个新的专用服务器,该服务器具有Windows 2008和SQL Server 2008。我正在尝试使用Server.CreateObject("MSXML2.ServerXMLHTTP")在同一台服务器上访问ASP页面。
在我们之前的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评级至关重要。

3个回答

12

微软发布了一篇名为INFO: 不要向同一服务器发送ServerXMLHTTP或WinHTTP请求的KB文章。

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

...

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

至于替代方案,取决于您在接收响应后要做什么。如果脚本的整个目的是将请求转发到profile_view.asp,您可能可以使用Server.Transfer代替。


4

我曾遇到过同样的问题。在我的情况下,我尝试进行的网络请求是一个内部站点url(在同一个应用程序池中)。启用服务器端调试时,asp应用程序池似乎被限制为单个工作线程。通过禁用此功能,请求随后能够被处理。


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);
    }
}

祝你好运!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接