Windows
IIS 10.0,經典 ASP 無法創建 MSXml2.ServerXmlHttp.6.0 對象
我有兩台 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 開始,然後從損壞的應用程序中添加特定設置。
如果它在同一個應用程序的基本頁面中執行良好,那麼您的頁面就是問題所在。
不確定配置內部的什麼會導致它中斷,但這就是我會嘗試的。