IIS 10.0, Classic ASP не может создать объект MSXml2.ServerXmlHttp.6.0

IIS 10.0, Classic ASP не может создать объект MSXml2.ServerXmlHttp.6.0

У меня есть две машины Server 2016, на которых запущено приложение Classic ASP в интегрированном пуле x64 иОбщая конфигурация.

Я думал, что оба сервера настроены одинаково, однакоодин сервервыдает ошибку:

Установить obj = Server.CreateObject("MSXml2.ServerXmlHttp.6.0")

Номер ошибки = 800401F3

ТОЛЬКО в моем приложении!

Если я помещаю эту строку на отдельную страницу ASP, работающую на том же сайте, она завершается нормально (Err.Number=0)

Я не нашел никаких записей в журнале событий.

Что я пробовал:

  • С версией и без (часть .6.0)
  • Разрешения реестра
  • Права доступа к файлам msxml3.dll и msxml6.dll (как System32, так и SysWOW64)
  • Отменить/повторно зарегистрировать те же самые DLL

Надеюсь на предложения о том, куда смотреть/как решить эту проблему.

решение1

Если он работает нормально на другой странице того же сайта, но не на другой странице того же приложения, это должно быть связано с настройками приложения. Начните с пустого web.config и добавьте определенные настройки из вашего сломанного приложения.

Если на базовой странице того же приложения все работает нормально, проблема именно в вашей странице.

Не уверен, что именно внутри конфигурации может привести к поломке, но я бы попробовал сделать именно это.

решение2

Проблема была связана не с созданием объекта, а с ошибкой (или изменением поведения) в Server.CreateObject() и некотором коде, который обрабатывал несколько версий разных COM DLL.

Существовал код, который обрабатывал несколько возможных версий DLL следующим образом:

    obj = Server.CreateObject("Version1.Object")

    If Err.Number <> 0 Then
        obj = Server.CreateObject("Version2.Object")
    End If

В конце, если один из этих вариантов был успешным, Err.Number = 0

В IIS 10.0 (Server 2016) успешное выполнение Server.CreateObject("Version2.Object") оставило предыдущее значение в Err.Number из Server.CreateObject("Version2.Object").

Новый код:

obj = Server.CreateObject("Version1.Object")

If Err.Number <> 0 Then
    Err.Clear
    obj = Server.CreateObject("Version2.Object")
End If

Связанный контент