Мы выполняем различные задания, используя сервер 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.)
Итак, мои вопросы:
- Возможно ли, чтобы приведенный выше код для IIS 7 работал вообще ссервер Windows 2003?
- Если нет # 1, есть ли лучший способ сделать это?