IIS 10.0,Classic ASP 无法创建 MSXml2.ServerXmlHttp.6.0 对象

IIS 10.0,Classic ASP 无法创建 MSXml2.ServerXmlHttp.6.0 对象

我有两台 Server 2016 计算机在 x64 集成池中运行 Classic ASP 应用程序,并且共享配置

我以为两台服务器的设置完全相同,然而一台服务器出现错误:

设置 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

相关内容