ASP.NET MVC 4 中的 ServerManager.OpenRemote 错误 80040154 CLSID {2b72133b-3f5b-4602-8952-803546ce3344}

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。

答案1

我找到了解决方案。问题在于我的 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 express 中的 aspnet.config 中的程序集重定向,它将始终回退到 Microsoft.Web.Administration 版本 7.9.0.0。

我使用 IIS Express 进行调试,但它将我重定向到错误版本的 Microsoft.Web.Administration.dll - 7.9.0.0,而我需要的是 7.0.0.0,它由完整 IIS 使用。因此,我将我的 MVC 应用程序托管在完整本地 IIS 上,在那里进行调试,它成功了!我成功地从远程 IIS 检索了站点列表。希望它能对某人有所帮助。

相关内容