Пара вещей, на которые стоит обратить внимание.Когда ваша роль запускается, она использует нечто, называемое IISConfigurator, для программного вызова IIS и создания приложений, виртуальных папок, пулов приложений и т. Д., Как определено в определении службы.Это делается один раз при запуске.
Помните, что процесс w3wp.exe, на котором размещается ваш сайт, полностью отделен от RoleEntryPoint, который вы можете использовать для запуска кода.Таким образом, вы не можете просто вызвать RoleEntryPoint.RequestRecycle () и ожидать, что IIS перезапустится (не будет).
Одно решение, которое вы можете попробовать, если вам необходимо перезапустить IIS, - это программно сделать это.Вот мое трехстрочное решение для перезапуска IIS в Windows Azure:
var mgr = new ServerManager();
var azurePools = mgr.ApplicationPools.Where(p => Guid.TryParse(p.Name));
azurePools.ToList().ForEach(p => p.Recycle());
Я использую знание того, что пулы приложений являются GUID в Windows Azure, чтобы отфильтровать их до тех, которые меня интересуют.
Теперь вам просто нужен способ запуска этого кода из повышенного состояния по требованию для каждого экземпляра.Это общая проблема с множеством решений.Возможно, каждый экземпляр опрашивает файл или таблицу на наличие сигнала для запуска этого кода всякий раз, когда вам нужно перезапустить IIS.