msxml3.dll ошибка «80072ee2» на странице ASP - PullRequest
8 голосов
/ 06 апреля 2011

Мы только что переехали на новый выделенный сервер с 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.

Ответы [ 3 ]

12 голосов
/ 22 ноября 2011

Microsoft опубликовала статью базы знаний под названием ИНФОРМАЦИЯ: Не отправлять запросы 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.

3 голосов
/ 16 мая 2012

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

3 голосов
/ 22 июля 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);
    }
}

Удачи!

...