ServerManager.OpenRemote ошибка 80040154 CLSID {2b72133b-3f5b-4602-8952-803546ce3344} в ASP.NET MVC 4

У меня есть консольное приложение, которое использует Microsoft.Web.Administration для удаленного управления IIS на удаленном сервере (я использовал этот https://stackoverflow.com/questions/22458410/credentials-for-servermanager-openremote - измененные свойства ahadmin, открыт TCP-порт 135. Я также использовал олицетворение). Все отлично работает - я могу удаленно создавать сайты и пулы приложений и так далее.

Но когда я пытаюсь сделать то же самое в приложении ASP.NET MVC 4, я получаю эту ошибку:

System.Runtime.InteropServices.COMException: получение фабрики классов COM для удаленного компонента с CLSID {2B72133B-3F5B-4602-8952-803546CE3344} с компьютера "remoteServerIP" не удалось из-за следующей ошибки: 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-3468933 для 386 580 445 353 353 535 для 355-го-38-го-го кв. аккаунт, который я использую, чтобы выдавать себя за. Кажется, проблема в некоторой разнице между 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, оно всегда будет использовать Microsoft.Web.Administration версии 7.9.0.0 из-за перенаправления сборки в aspnet.config в IIS выразить.

Я использовал IIS Express для отладки, и он перенаправил меня на неправильную версию Microsoft.Web.Administration.dll - 7.9.0.0, и мне понадобился 7.0.0.0, который используется полным IIS. Поэтому я разместил свое приложение MVC на полном локальном IIS, отладил его там, и оно заработало! Я успешно получил список сайтов из удаленного IIS. Надеюсь, это кому-нибудь поможет.

Другие вопросы по тегам