web-dev-qa-db-fra.com

Comment puis-je arrêter ou démarrer un site Web par programme dans IIS (6.0 et 7.0) en utilisant MsBuild?

J'ai des serveurs Windows Server 2003 (IIS 6.0) et Windows Server 2008 (IIS 7.0) et j'utilise MSBuild pour déployer des applications Web.

Je dois effectuer un déploiement en toute sécurité et procéder ainsi:

  1. Arrêtez un site Web dans IIS 6 (ou une application dans IIS 7), pas arrêter AppPool.

  2. Vérifiez si le site Web est arrêté; ne pas courrir.

  3. Si le site Web est arrêté, effectuez une autre tâche pour le déploiement.

  4. Démarrer le site Web IIS 6 (ou Application dans IIS 7), 

Comment puis-je atteindre cet objectif?

Mise à jour: clé pour moi: IIS6WebSite et IIS6AppPool (et pour IIS7), attendez le statut arrêté lorsque vous essayez d'arrêter le site Web ou l'AppPool?

Lorsque j'exécute Stop Action for Website (ou Stop Action for AppPool), je dois être sûr à 100% que ce site Web est arrêté, puis, et uniquement si Site est arrêté, je peux exécuter d'autres cibles.

30
Kiquenet

En ajoutant une référence à Microsoft.Web.Administration (qui se trouve dans X:\Windows\System32\inetsrv, ou l’équivalent de votre système), vous pouvez obtenir un contrôle géré agréable de la situation avec IIS7, comme illustré ci-dessous:

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!");
            }
        }
    }
}

Évidemment, adaptez-le à vos propres besoins et exécutez l'application résultante via votre script de construction de déploiement.

Prendre plaisir. :)

41
Grant Thomas
  • Écrire un script , par exemple PowerShell, qui arrêtera/démarrera le site Web IIS en s’appuyant par programme sur un argument de ligne de commande, par exemple start-stop.ps1 /stop 1

  • Mettez-le dans le script MsBuild en tant qu'étape personnalisée


Vérifiez this pour savoir comment redémarrer IIS AppPool

IIS Référence aux objets WMI

1
abatishchev

Donc, vous avez votre réponse ci-dessus pour IIS7. Ce qui vous manque, c'est IIS6. Alors voilà. Ceci utilise un objet d'interopérabilité COM, car c'est tout ce qui est disponible pour IIS 6. De plus, comme il est en vb, vous devrez trouver le moyen de le convertir. http://www.codeproject.com/Articles/16686/A-C-alternative-for-the-Visual-Basic-GetObject-fun devrait vous mettre sur la bonne voie. vous pouvez également créer un projet vb uniquement pour ce code, mais c'est un peu ridicule.

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