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

时间:2011-04-05 23:21:55

标签: asp-classic serverxmlhttp

我们刚搬到了一台拥有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评级至关重要。< / p>

3 个答案:

答案 0 :(得分:12)

Microsoft发布了一篇名为INFO: Do Not Send ServerXMLHTTP or WinHTTP Requests to the Same Server

的知识库文章
  

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

     

...

     

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

就替代方案而言,它取决于您在收到回复后对回复做了什么。如果脚本的整个目的是将请求转发到profile_view.asp,您可以改为使用Server.Transfer

答案 1 :(得分:3)

msxml3.dll很老了。它随Internet Explorer 6一起发布,给你一个粗略的想法。

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

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

如果问题真的发生了一段时间,你可以考虑切换ASP缓冲。 (这个基于soley的猜测是,如果服务器对象开始收到响应,它将在超时前面停止。

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

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);
    }
}
祝你好运!

答案 2 :(得分:3)

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