IIS 10.0, ASP clásico no puede crear el objeto MSXml2.ServerXmlHttp.6.0

IIS 10.0, ASP clásico no puede crear el objeto MSXml2.ServerXmlHttp.6.0

Tengo dos máquinas Server 2016 que ejecutan una aplicación ASP clásica en un grupo integrado x64 yConfiguración compartida.

Sin embargo, pensé que ambos servidores estaban configurados de manera idéntica.un servidorobtiene un error en:

Establecer obj = Server.CreateObject("MSXml2.ServerXmlHttp.6.0")

Número de error = 800401F3

¡SOLO en mi aplicación!

Si pongo esa línea en una página ASP separada, ejecutándose en el mismo sitio, se completa normalmente (Err.Number=0)

No encontré entradas en el registro de eventos.

Lo que he probado:

  • Con y sin versión (parte .6.0)
  • Permisos de registro
  • Permisos de archivos en msxml3.dll y msxml6.dll (tanto System32 como SysWOW64)
  • Deshacer/volver a registrar las mismas DLL

Espero sugerencias sobre dónde buscar/cómo solucionar este problema.

Respuesta1

Si funciona bien en otra página del mismo sitio pero no en otra página de la misma aplicación, debe tener que ver con la configuración de la aplicación. Comience con un web.config vacío y agregue configuraciones específicas de su aplicación rota.

Si funciona bien en una página básica en la misma aplicación, tu página es el problema.

No estoy seguro de qué dentro de la configuración causaría que esto se rompiera, pero eso es lo que intentaría.

Respuesta2

Esto no fue un problema con la creación de objetos sino con un error (o cambio de comportamiento) en Server.CreateObject() y algún código que manejaba múltiples versiones de una DLL COM diferente.

Había un código que manejaba múltiples versiones posibles de una DLL de la siguiente manera:

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

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

Al final de esto, suponiendo que uno de estos haya tenido éxito, Err.Number = 0

En IIS 10.0 (Server 2016), un Server.CreateObject("Version2.Object") exitoso dejó el valor anterior en Err.Number de Server.CreateObject("Version2.Object").

Nuevo código:

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

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

información relacionada