wake-up-neo.com

Wie kann ich eine Website in programmgesteuert stoppen oder starten? IIS (6.0 und 7.0) mit MsBuild?

Ich besitze Server mit Windows Server 2003 (IIS 6.0) und Windows Server 2008 (IIS 7.0) und verwende MSBuild zum Bereitstellen von Webanwendungen.

Ich muss eine sichere Bereitstellung durchführen und dies tun:

  1. Beenden Sie eine Website in IIS 6 (oder eine Anwendung in IIS 7) und nicht AppPool.

  2. Überprüfen Sie, ob die Website gestoppt ist. nicht laufen.

  3. Wenn die Website angehalten wird, führen Sie eine andere Aufgabe für die Bereitstellung aus.

  4. Starten Sie die Website IIS 6 (oder die Anwendung in IIS 7).

Wie kann ich das erreichen?

Update: Schlüssel für mich: IIS6WebSite und IIS6AppPool (und für IIS7) warten auf den Status "Angehalten", wenn Sie versuchen, Website oder AppPool anzuhalten?

Wenn ich Stop Action for Website (oder Stop Action for AppPool) ausführe, muss ich 100% sicher sein, dass die Website gestoppt ist, und dann kann ich nur dann, wenn die Website gestoppt ist, andere Ziele ausführen.

30
Kiquenet

Durch Hinzufügen eines Verweises auf Microsoft.Web.Administration (der inX:\Windows\System32\inetsrv oder in Ihrem System gleichwertig ist) können Sie mit IIS7 eine Nice-Steuerung der Situation erreichen, wie unten gezeigt:

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

Passen Sie dies selbstverständlich an Ihre eigenen Anforderungen an und führen Sie die resultierende Anwendung über Ihr Implementierungs-Build-Skript aus.

Genießen. :)

41
Grant Thomas
  • Schreiben Sie ein Skript , z. PowerShell, die die Website IIS stoppt/startet und sich dabei programmgesteuert auf das Befehlszeilenargument, z. start-stop.ps1 /stop 1

  • Fügen Sie es als benutzerdefinierten Schritt in das MsBuild-Skript ein


Überprüfen Sie this , um herauszufinden, wie Sie IIS AppPool neu starten können

IIS WMI-Objektreferenz

1
abatishchev

Sie haben also oben Ihre Antwort für IIS7. Was Sie vermissen, ist IIS6. Also los geht's. Hierbei wird ein COM-Interop-Objekt verwendet, da dies alles ist, was für IIS 6 zur Verfügung steht. Da es sich jedoch in vb befindet, müssen Sie herausfinden, wie es konvertiert wird.http://www.codeproject.com/Articles/16686/A-C-alternative-des-Visual-Basic-GetObject-funsollte Sie auf den richtigen Weg bringen. Sie könnten auch ein vb-Projekt nur für diesen Code erstellen, aber das ist irgendwie dumm.

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