IIS 10.0, Classic ASP kann kein MSXml2.ServerXmlHttp.6.0-Objekt erstellen

IIS 10.0, Classic ASP kann kein MSXml2.ServerXmlHttp.6.0-Objekt erstellen

Ich habe zwei Server 2016-Maschinen, auf denen eine Classic ASP-Anwendung in einem integrierten x64-Pool ausgeführt wird, undGemeinsame Konfiguration.

Ich dachte, dass beide Server identisch eingerichtet sind, aberein Servererhält einen Fehler bei:

Setzen Sie obj = Server.CreateObject("MSXml2.ServerXmlHttp.6.0")

Fehlernummer = 800401F3

NUR in meiner Bewerbung!

Wenn ich diese Zeile in eine separate ASP-Seite einfüge, die auf derselben Site ausgeführt wird, wird sie normal abgeschlossen (Err.Number=0).

Ich habe keine Ereignisprotokolleinträge gefunden.

Was ich versucht habe:

  • Mit und ohne Version (.6.0 Teil)
  • Registrierungsberechtigungen
  • Dateiberechtigungen für msxml3.dll und msxml6.dll (sowohl System32 als auch SysWOW64)
  • Dieselben DLLs de-/erneut registrieren

Ich hoffe auf Vorschläge, wo ich suchen bzw. wie ich das Problem beheben kann.

Antwort1

Wenn es auf einer anderen Seite derselben Site einwandfrei läuft, aber auf einer anderen Seite derselben Anwendung nicht, muss es an den Anwendungseinstellungen liegen. Beginnen Sie mit einer leeren web.config und fügen Sie bestimmte Einstellungen aus Ihrer defekten App hinzu.

Wenn es auf einer Basisseite in derselben App einwandfrei läuft, liegt das Problem bei Ihrer Seite.

Ich bin nicht sicher, was in der Konfiguration den Fehler verursachen könnte, aber ich würde es genau versuchen.

Antwort2

Dies war kein Problem bei der Objekterstellung, sondern ein Fehler (oder eine Verhaltensänderung) in Server.CreateObject() und einem Code, der mehrere Versionen einer anderen COM-DLL verarbeitete.

Es gab Code, der mehrere mögliche Versionen einer DLL wie folgt behandelte:

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

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

Am Ende, vorausgesetzt, einer davon war erfolgreich, Err.Number = 0

In IIS 10.0 (Server 2016) hat ein erfolgreiches Server.CreateObject("Version2.Object") den vorherigen Wert in Err.Number von Server.CreateObject("Version2.Object") belassen.

Neuer Code:

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

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

verwandte Informationen