ASP.NET MVC 4 中的 ServerManager.OpenRemote 錯誤 80040154 CLSID {2b72133b-3f5b-4602-8952-803546ce3344}
我有一個控制台應用程序,它使用 Microsoft.Web.Administration 遠端管理遠端伺服器上的 IIS(我使用了這個https://stackoverflow.com/questions/22458410/credentials-for-servermanager-openremote - 修改了 ahadmin 屬性,打開TCP 埠 135。我也使用了模擬)。一切正常——我可以遠端創建站點和應用程序池等等。
但是當我試圖在 ASP.NET MVC 4 應用程序中做同樣的事情時,我得到了這個錯誤:
System.Runtime.InteropServices.COMException:從機器“remoteServerIP”檢索具有 CLSID {2B72133B-3F5B-4602-8952-803546CE3344} 的遠端組件的 COM 類工廠失敗,原因是以下錯誤:80040154“remoteServerIP”。
我知道很多人都遇到了這個錯誤,我看到了很多關於它的文章,但對我沒有任何幫助。我嘗試將我的 MVC 應用程序切換到平台目標 X86(https://stackoverflow.com/questions/1036856/retrieving-the-com-class-factory-for-component-with-clsid-xxxx-failed-due-to-t ?rq=1 ),在遠端電腦上,我為 HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID{2b72133b-3f5b-4602-8952-803546ce3344} 和 HKEY_CLASSES_ROOT\CLSID{2b72133b-3f5b-4602-8952-803546ce3344} 啟用了完全權限我用來模擬的帳戶。問題似乎在於 MVC 和控制台應用程序之間存在一些差異,但我無法弄清楚它是什麼。
我在 Windows 7 x64 上,遠端伺服器 - windows server 2008 R2 x64。兩台機器上都有 IIS 7.5。
我找到了解決方案。問題是我的 MVC 應用程序使用了錯誤版本的 Microsoft.Web.Administration.dll。
當我調試控制台應用程序時,我能夠使用此程式碼從本地 IIS 獲取站點列表
ServerManager serverManager = new ServerManager();
以及使用此程式碼的遠端 IIS 的站點列表
ServerManager serverManager = ServerManager.OpenRemote("remoteServerIpAddress");
一切都很好。然後我將完全相同的程式碼放在 MVC 應用程序中,當我嘗試從遠端 IIS 獲取站點列表時,我從問題中得到了異常。在嘗試從本地 IIS 獲取站點列表時,我從 IIS Express 獲取了網站。伺服器管理器似乎連接到 IIS Express 而不是完整的 IIS,但我一開始並沒有太在意這個。很遺憾。
無意中我發現這篇文章 Microsoft.Web.Administration.ServerManager 正在尋找 IISExpress applicationHost.config 的錯誤目錄,從那裡我發現
如果您使用 Microsoft.Web.Administration … 的應用程序在 IISExpress 上執行,由於 IIS 中的 aspnet.config 中的程序集重定向,它將始終回退到 Microsoft.Web.Administration 版本 7.9.0.0表示。
我使用 IIS Express 進行調試,它把我重定向到錯誤版本的 Microsoft.Web.Administration.dll - 7.9.0.0,我需要完整 IIS 使用的 7.0.0.0。因此,我在完整的本地 IIS 上託管了我的 MVC 應用程序,在那裡對其進行了調試,並且成功了!我成功地從遠端 IIS 中檢索了站點列表。希望它可以幫助某人。