Ошибка msxml3.dll «80072ee2» на странице ASP

Мы только что переехали на новый выделенный сервер с Windows 2008 и SQL Server 2008. Я пытаюсь получить доступ к странице ASP на том же сервере, используя 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.


person neojakey    schedule 05.04.2011    source источник


Ответы (3)


Microsoft опубликовала статью базы знаний под названием ИНФОРМАЦИЯ: не отправлять запросы ServerXMLHTTP или WinHTTP на один и тот же сервер.

Если компонент ServerXMLHTTP или WinHTTP должен отправить запрос другому ASP на том же сервере, целевой ASP должен быть расположен в другом виртуальном каталоге и настроен для работы в режиме высокой изоляции. Избегайте использования ServerXMLHTTP или WinHTTP для отправки запроса ASP, расположенному в том же виртуальном каталоге.

...

Для выполнения страниц ASP доступно конечное число рабочих потоков (в процессе Inetinfo.exe или Dllhost.exe). Если все рабочие потоки ASP отправляют HTTP-запросы обратно одному и тому же процессу Inetinfo.exe или Dllhost.exe на сервере, с которого отправляются запросы, процесс Inetinfo.exe или Dllhost.exe может заблокироваться или перестать отвечать (зависнуть). потому что пул рабочих потоков для обработки входящих запросов будет исчерпан. Это по дизайну.

Что касается альтернатив, это зависит от того, что вы делаете с ответом после его получения. Если вся цель сценария — перенаправить запрос на profile_view.asp, вы можете использовать Server.Transfer вместо этого.

person Cheran Shunmugavel    schedule 22.11.2011

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

Удачи!

person Dan Smith    schedule 21.07.2011

У меня была такая же проблема. В моем случае веб-запрос, который я пытался сделать, был внутренним URL-адресом сайта (в том же пуле приложений). При включенной отладке на стороне сервера пул приложений asp, по-видимому, ограничен одним рабочим потоком. Отключив эту функцию, запрос можно было обработать.

person dva    schedule 16.05.2012