![IIS 10.0,Classic ASP 无法创建 MSXml2.ServerXmlHttp.6.0 对象](https://linux22.com/image/719067/IIS%2010.0%EF%BC%8CClassic%20ASP%20%E6%97%A0%E6%B3%95%E5%88%9B%E5%BB%BA%20MSXml2.ServerXmlHttp.6.0%20%E5%AF%B9%E8%B1%A1.png)
我有两台 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