IIS 10.0、經典 ASP 無法建立 MSXml2.ServerXmlHttp.6.0 對象

IIS 10.0、經典 ASP 無法建立 MSXml2.ServerXmlHttp.6.0 對象

我有兩台 Server 2016 電腦在 x64 整合池中運行經典 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") 保留了 Server.CreateObject("Version2.Object") 中 Err.Number 中的先前值。

新代碼:

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

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

相關內容