тот же сервер, получите URL-адрес: vbscript msxml3.dll 80004005 неуказанная ошибка или ошибка msxml6.dll «80072ee6» Системная ошибка: -2147012890

Как правильно получить вывод страницы asp, расположенной на том же сервере?

<%

GetUrl "/route/to/abc/123/"

Function GetUrl(url)
    Set objXMLHTTP = CreateObject("MSXML2.ServerXMLHTTP.3.0")
    objXMLHTTP.open "GET", URL, false
    objXMLHTTP.send()
    If objXMLHTTP.Status = 200 Then
        Response.Write objXMLHTTP.ResponseText
    End if
    Set objXMLHTTP = Nothing
End Function

%>

приводит к этой надоедливой ошибке.

msxml3.dll error '80004005'
Unspecified error
/test.asp, line 7

переход на более новый serverxmlhttp

set objXMLHTTP = Server.CreateObject("MSXML2.ServerXMLHTTP.6.0")

выявляет другую, более значимую ошибку:

msxml6.dll error '80072ee6'
System error: -2147012890.
/test.asp, line 8

для чего Google с радостью нашел причину, в которой говорится: «Не используйте serverXmlHttp для подключения к тому же серверу. (https://support.microsoft.com/en-us/kb/316451) Чем вы пользуетесь? В статье мало что предлагалось.

В любом случае, круто, у моей ошибки есть веская причина. Но что вы используете для подключения к тому же серверу под классическим asp для захвата вывода страниц? Эта статья (https://www.microsoft.com/technet/prodtechnol/WindowsServer2003/Library/IIS/aa23d158-000a-4ba2-8fe8-99895854d7f0.mspx?mfr=true) упоминает, что если я использую режим изоляции, то процесс выполняется отдельно от процесса веб-сервера, и я не могу использовать SSI, я все равно не могу понять, как его включить. В любом случае это звучит противно. SSI критичен в моем приложении, поэтому я не могу его учитывать.

Что у меня осталось (кроме очевидного: отказаться от ASP)? создать командную строку wscript.shell и вытащить ее оттуда, вернув обратно на стандартный вывод? отскочить от другого сервера рефлектора? Грр


person frumbert    schedule 14.06.2015    source источник
comment
Поскольку у вас есть ровно 30 дней до прекращения поддержки Windows Server 2003 (и IIS 6), я бы сказал, что сейчас вашей основной задачей должен быть переход на IIS 7+.   -  person Ansgar Wiechers    schedule 14.06.2015


Ответы (1)


Вы не можете запросить веб-страницу с веб-сайта, работающего под одним и тем же пулом приложений.

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

Если один рекурсивный запрос приводит к тупиковой ситуации в IIS, обычно это происходит из-за того, что включена отладка сценария ASP.

Решение: создайте новую папку, поместите в нее свой скрипт. После этого в IIS создайте новый пул приложений, а также создайте новое приложение для этой папки.

Как создать новое приложение для какой-либо папки: введите здесь описание изображения

Пример, когда папка назначается новому пулу приложений: введите здесь описание изображения

ПРИМЕЧАНИЕ. Не пытайтесь использовать сторонние библиотеки DLL для загрузки веб-страницы из того же пула приложений. Результат будет тот же. Протестировано с некоторым бесплатным http-компонентом.

person Zam    schedule 14.06.2015
comment
Помещение сценария в новую папку требует некоторой инженерной работы с моими маршрутами и представлениями, но, эй, это лучше, чем очищать вывод wget из командной оболочки ... ура :) (документация ms ломала мне голову, наряду со всеми другие исправления, предложенные Google) - person frumbert; 15.06.2015