2011-02-10 14 views
29

Mam serwery Windows Server 2003 (IIS 6.0) i Windows Server 2008 (IIS 7.0), a do wdrażania aplikacji internetowych używam MSBuild.Jak mogę programowo zatrzymać lub uruchomić stronę w IIS (6.0 i 7.0) używając MsBuild?

muszę zrobić bezpieczne wdrażanie i to zrobić:

  1. Zatrzymaj stronę internetową w IIS 6 (lub aplikacji w IIS 7), nie zatrzymują AppPool.

  2. Sprawdź, czy witryna jest zatrzymana; nie działa.

  3. Jeśli witryna jest zatrzymana, wykonaj inne zadanie do wdrożenia.

  4. Zacznij strona IIS 6 (lub aplikacji w IIS 7),

W jaki sposób można to osiągnąć?

Aktualizacja: Klucz dla mnie: IIS6WebSite i IIS6AppPool (i dla IIS7), czy czekać na status zatrzymania, gdy próbujesz zatrzymać witrynę lub AppPool?

Po wykonaniu czynności Zatrzymaj dla witryny internetowej (lub Zatrzymaj działanie dla AppPool), muszę się upewnić, że w 100% witryna jest zatrzymana, a następnie i tylko wtedy, gdy witryna jest zatrzymana, mogę wykonywać inne cele.

+0

Wierzę, że to, czego szukasz, to coś w stylu [MSBuild Extension Pack] (http://msbuildextensionpack.codeplex.com/). Zapewnia zadania do uruchamiania/zatrzymywania witryn IIS (dla II6 patrz [Iis6WebSite] (http://www.msbuildextensionpack.com/help/4.0.2.0/html/2849df01-25a8-6f99-5a0c-0fa7a6df5084.htm)). –

+0

+1, podczas gdy wszystko tutaj "działa", jest to najlepszy sposób, jeśli używasz tylko MSBuild. Po co wyważać koło? –

+0

Klucz dla mnie: Iis6WebSite i IIs6AppPool (i dla IIS7), czy czekać na status zatrzymany, gdy próbujesz zatrzymać WebSite lub AppPool? – Kiquenet

Odpowiedz

1
  • Write a script, np. PowerShell, który zatrzyma/uruchom serwis WWW IIS programowo opierając się na argumencie wiersza poleceń, np. start-stop.ps1 /stop 1

  • Umieścić go w skrypcie MSBuild jako niestandardowego kroku


Sprawdź this aby dowiedzieć się, jak ponownie uruchomić IIS AppPool

IIS WMI objects reference

+1

Należy zauważyć, że IIS7 ma zarządzane API, zamiast polegać na 'DirectoryServices' lub' WMI': http://learn.iis.net/page.aspx/284/using-managed-apis-in-iis-7/ i http://msdn.microsoft.com/en-us/library/microsoft.web.administration(v=vs.90).aspx –

+0

dowolny przykładowy msbuild i powershell? Potrzebuję zatrzymać i uruchomić WebSites w iis6 (lub w iis7), a nie appPool. – Kiquenet

37

Dodając odwołanie do Microsoft.Web.Administration (które można znaleźć w X:\Windows\System32\inetsrv lub odpowiednikach twojego systemu) możesz osiągnąć ve piękny zarządzanego kontrolę nad sytuacją z IIS7, jak próbą poniżej:

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

Oczywiście dostosować to do własnych wymagań i przez skrypt kompilacji rozmieszczenie wykonać wynikowy aplikacji.

Ciesz się. :)

+0

Czy mogę używać Microsoft.Web.Administration dla Win2003-IIS 6 i VS 2008 .NET 3.5 ?? – Kiquenet

+2

Nie, to będzie działać tylko dla IIS7. Będziesz potrzebował innego podejścia do IIS6, takiego jak użycie 'WMI' lub' DirectoryServices'. –

+4

Uwaga 'Microsoft.Web.Administration' można również znaleźć na' NuGet' –

0

Masz więc swoją odpowiedź powyżej dla IIS7. To, czego brakuje, to IIS6. Więc proszę. Jest to obiekt współdziałający z COM, ponieważ jest to wszystko, co jest dostępne dla IIS 6. Ponadto, ponieważ jest w vb, musisz dowiedzieć się, jak go przekonwertować. http://www.codeproject.com/Articles/16686/A-C-alternative-for-the-Visual-Basic-GetObject-fun powinien doprowadzić cię na właściwą drogę. można również utworzyć projekt vb tylko dla tego kodu, ale to trochę głupie.

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