Управлять сервером IIS 7 с сервера Windows 2003 программно - PullRequest
1 голос
/ 17 августа 2010

Мы выполняем различные задания, используя сервер Windows 2003.Некоторые из этих заданий отправляют команды пула приложений на веб-серверы под управлением IIS 6 (перезапуск, запуск, остановка).Теперь у нас есть веб-сервер Windows 2008 с IIS 7, и мы хотим отправлять те же команды.Все это делается с помощью C #.

Это код, который мы используем для отправки команд для IIS 6:

var methodToInvoke = "Stop"; // could be "Stop", "Start", or "Recycle"
var co = new ConnectionOptions
{
   Impersonation = ImpersonationLevel.Impersonate,
   Authentication = AuthenticationLevel.PacketPrivacy
};

var objPath = string.Format("IISApplicationPool.Name='W3SVC/AppPools/{0}'", appPoolName);
var scope = new ManagementScope(string.Format(@"\\{0}\root\MicrosoftIISV2", machineName), co);

using (var mc = new ManagementObject(objPath))
{
   mc.Scope = scope;
   mc.InvokeMethod(methodToInvoke, null, null);
}

Этот код не работает для IIS 7 из-за базовых изменений, поэтому в настоящее время мы пытаемся это:

using (ServerManager serverManager = ServerManager.OpenRemote(machineName))
{
   var appPool = serverManager.ApplicationPools[appPoolName];
   if (appPool != null)
   {
      appPool.Stop(); // or app.Start() or app.Recycle()
      serverManager.CommitChanges();
   }
}

Приведенный выше код прекрасно работает на моей рабочей станции, которая работает под управлением Windows 7 (и, следовательно, IIS 7.5).Однако, это не работает, когда я развертываю этот код на нашем сервере приложений.Получается эта ошибка:

System.InvalidCastException: 
Unable to cast COM object of type 'System.__ComObject' to interface type 
'Microsoft.Web.Administration.Interop.IAppHostWritableAdminManager'. 
This operation failed because the QueryInterface call on the COM component for the 
interface with IID '{FA7660F6-7B3F-4237-A8BF-ED0AD0DCBBD9}' failed due to the following error: 
Interface not registered (Exception from HRESULT: 0x80040155).   

Из моего исследования это связано с тем, что IIS 7 недоступен на сервере Windows Server 2003.(Я включил файл Microsoft.Web.Administration.dll.)

Итак, мои вопросы:

  1. Возможно ли, чтобы приведенный выше код для IIS 7 работал вообще ссервер Windows 2003?
  2. Если нет # 1, есть ли лучший способ сделать это?

Ответы [ 3 ]

2 голосов
/ 02 декабря 2010

Из-за прочтения не представляется возможным сделать то, что вы ищете. Недостаточно включить файлы DLL. Согласно http://forums.iis.net/t/1149274.aspx..

Чтобы использовать Microsoft.Web.Administration, вам нужно установить IIS, как минимум, вам нужно установить API-интерфейсы конфигурации, которые предоставляются при установке Инструментов управления.

К сожалению, нет SDK, позволяющего это сделать, и он имеет несколько зависимостей от других компонентов, которые не позволят вам просто перенести его на другой компьютер и заставить его работать (например, объекты COM, DLL и т. Д.).

Мне было бы интересно узнать, нашли ли вы способ обойти это.

Спасибо

0 голосов
/ 13 сентября 2012

Microsoft.Web.Administration, он опирается на System.Web.dll, предоставленный платформой 4, а не профилем клиента.

0 голосов
/ 16 декабря 2010

Попробуйте вместо этого управлять пулом IIS с помощью DirectoryEntry.

См. Эту тему: Проверка состояния пула приложений (IIS 6) с помощью C #

...