我有兩台 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