Windows

IIS 10.0,經典 ASP 無法創建 MSXml2.ServerXmlHttp.6.0 對象

  • March 26, 2018

我有兩台 Server 2016 機器在 x64 Integrated pool 和Shared Configuration中執行 Classic ASP 應用程序。

我認為兩台伺服器的設置相同,但是一台伺服器出現錯誤:

設置 obj = Server.CreateObject(“MSXml2.ServerXmlHttp.6.0”)

錯誤號 = 800401F3

僅在我的應用程序中!

如果我將該行放在單獨的 ASP 頁面中,在同一個站點中執行,它會正常完成 (Err.Number=0)

我沒有發現任何事件日誌條目。

我試過的:

  • 有無版本(.6.0 部分)
  • 系統資料庫權限
  • msxml3.dll 和 msxml6.dll 的文件權限(System32 和 SysWOW64)
  • 取消/重新註冊相同的 DLL

我希望就在哪裡尋找/如何解決這個問題提出建議。

這不是對象創建的問題,而是 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

如果它在同一個站點的另一個頁面上執行良好,但在同一個應用程序的另一個頁面上執行良好,則它必須與應用程序設置有關。從一個空的 web.config 開始,然後從損壞的應用程序中添加特定設置。

如果它在同一個應用程序的基本頁面中執行良好,那麼您的頁面就是問題所在。

不確定配置內部的什麼會導致它中斷,但這就是我會嘗試的。

引用自:https://serverfault.com/questions/901699