Как программно остановить или запустить веб-сайт в IIS (6.0 и 7.0) с помощью MsBuild? - PullRequest
32 голосов
/ 10 февраля 2011

У меня есть серверы Windows Server 2003 (IIS 6.0) и Windows Server 2008 (IIS 7.0), и я использую MSBuild для развертывания веб-приложений.

Мне нужно выполнить безопасное развертывание и сделать следующее:

  1. Остановите веб-сайт в IIS 6 (или приложение в IIS 7), а не остановите AppPool.

  2. Проверьте, не остановлен ли сайт; не работает.

  3. Если веб-сайт остановлен, выполните еще одно задание для развертывания.

  4. Запустите веб-сайт IIS 6 (или Приложение в IIS 7),

Как мне этого добиться?

Обновление: ключ для меня: IIS6WebSite и IIS6AppPool (и для IIS7), дождитесь остановки статуса при попытке остановить сайт или AppPool?

Когда я выполняю Stop Action for Website (или Stop Action for AppPool), я должен быть уверен на 100%, что Сайт остановлен, и тогда, и только если Сайт остановлен, я могу выполнить другие цели.

Ответы [ 3 ]

44 голосов
/ 10 февраля 2011

Добавив ссылку на Microsoft.Web.Administration (которую можно найти в X:\Windows\System32\inetsrv, или эквивалент вашей системы), вы можете добиться хорошего управляемого управления ситуацией с IIS7, как показано ниже:

namespace StackOverflow
{
    using System;
    using System.Linq;
    using Microsoft.Web.Administration;

    class Program
    {
        static void Main(string[] args)
        {
            var server = new ServerManager();
            var site = server.Sites.FirstOrDefault(s => s.Name == "Default Web Site");
            if (site != null)
            {
                //stop the site...
                site.Stop();
                if (site.State == ObjectState.Stopped)
                {
                    //do deployment tasks...
                }
                else
                {
                    throw new InvalidOperationException("Could not stop website!");
                }
                //restart the site...
                site.Start();
            }
            else
            {
                throw new InvalidOperationException("Could not find website!");
            }
        }
    }
}

Очевидно, приспособьте это к вашим собственным требованиям и запустите получившееся приложение с помощью сценария сборки развертывания.

Наслаждайтесь. :)

2 голосов
/ 10 февраля 2011
  • Напишите сценарий , например PowerShell, который будет программно останавливать / запускать веб-сайт IIS, основываясь на аргументе командной строки, например start-stop.ps1 /stop 1

  • Поместите его в скрипт MsBuild как пользовательский шаг


Проверьте this , чтобы узнать, как перезапустить IIS AppPool

Ссылка на объекты IIS WMI

0 голосов
/ 13 мая 2016

Итак, у вас есть свой ответ выше для IIS7.Чего не хватает, так это IIS6.Итак, поехали.Здесь используется объект взаимодействия COM, поскольку это все, что доступно для IIS 6. Кроме того, поскольку он находится в vb, вам придется выяснить, как его преобразовать.http://www.codeproject.com/Articles/16686/A-C-alternative-for-the-Visual-Basic-GetObject-fun должно привести вас на правильный путь.Вы также можете создать проект vb только для этого кода, но это глупо.

Dim WebServiceObj As Object
dim IisSiteId as Integer = 0
WebServiceObj = GetObject("IIS://localhost/W3SVC/" & IisSiteId)
WebServiceObj.Stop()
WebServiceObj.Start()
...