Freigeben über


Konfigurieren des IIS World Wide Web Publishing Service in einem Windows Server-Failovercluster

In diesem Artikel wird beschrieben, wie Sie Microsoft-Internetinformationsdienste (IIS) World Wide Web Publishing Service (W3SVC) in einem Windows Server-Failovercluster (WSFC) konfigurieren.

Ursprüngliche Produktversion: Windows Server 2008 und höhere Versionen, Internetinformationsdienste 8.0 und höher
Ursprüngliche KB-Nummer: 970759

Einführung

Die Verfahren in diesem Artikel gelten nur für den World Wide Web Publishing Service. Anweisungen zum Konfigurieren des FTP-Veröffentlichungsdiensts in einem Failovercluster finden Sie unter Konfigurieren von FTP für IIS in einem Windows Server-Failovercluster.

Weitere Informationen

In früheren Versionen von Internetinformationsdienste stellte Microsoft generische Ressourcenüberwachungskomponenten zur Unterstützung von Webserverinstanzen mit hoher Verfügbarkeit mithilfe der Microsoft Clustering-Infrastruktur bereit. Es wurde jedoch benutzerdefinierter Code benötigt, um das Potenzial einer solchen Lösung vollständig zu realisieren. Außerdem erfüllten die von Microsoft bereitgestellten generischen Skripts die Kundenanforderungen nicht. Um IIS 7.0 oder eine höhere Version in einer gruppierten Umgebung zu konfigurieren, die Windows Server-Failoverclustering verwendet, müssen Sie einen benutzerdefinierten Code (Skripting) verwenden, um ein solches Szenario mit hoher Verfügbarkeit zu ermöglichen. Wenn Sie dies tun, können Benutzer das Setup so anpassen, dass sie ihren Anforderungen entsprechen. die ihnen die volle Kontrolle über die Integration hoher Verfügbarkeit von Webanwendungen bietet. Darüber hinaus bieten die Skriptschnittstellen für die Verwaltung und Überwachung, die in IIS 7.0 eingeführt wurden, eine umfangreichere Umgebung als die zuvor bereitgestellten Skripts.

Notiz

Die IIS 7.0-Installationsdateien enthalten fälschlicherweise die Skriptdateien "Clusweb.vbs " und "Clusftp.vbs ", die in IIS 6.0 für administrative IIS-Clusteraufgaben verwendet werden. Verwenden Sie diese Skripts nicht mit IIS 7.0 oder einer höheren Version.

Es wird empfohlen, dass Administratoren die Verwendung des Netzwerklastenausgleichs (Network Load Balancing, NLB) als primäre und bevorzugte Methode zur Verbesserung der Skalierbarkeit und Verfügbarkeit von Webanwendungen mit mehreren Servern mit IIS 7.0 oder einer höheren Version im Gegensatz zur Verwendung von Failoverclustering sorgfältig auswerten. Einer der Vorteile von NLB besteht darin, dass alle Server aktiv an der gleichzeitigen Verarbeitung eingehender HTTP-Anforderungen (HyperText Transfer Protocol) teilnehmen können. Ein weiterer Vorteil ist, dass es in einer NLB-IIS-Umgebung viel einfacher sein kann, Rollupdates und Rollbacks zu unterstützen und gleichzeitig eine hohe Verfügbarkeit von Webanwendungen bereitzustellen. Weitere Informationen zur Verwendung von IIS 7.0 oder einer höheren Version in einer NLB-Umgebung finden Sie in den folgenden Artikeln:

Es ist wichtig zu berücksichtigen, dass das Clustering von IIS durch Clustering der IIS-Dienste nicht immer eine Hochverfügbarkeitslösung für Webanwendungen garantiert. Während die IIS-Dienste (insbesondere der WWW-Dienst) ausgeführt werden können, könnte der Hostingprozess eines bestimmten Anwendungspools beendet worden sein, oder die Anwendung löst interne Server-HTTP-Fehler aus. Das Clustern der Webanwendungen und die Überwachung ihrer Integrität mithilfe eines benutzerdefinierten Skripts ist die richtige und empfohlene Methode, um einen IIS-Cluster mit hoher Verfügbarkeit mithilfe von Failoverclustering zu erreichen. Nachfolgend finden Sie ein Beispielskript, das den Zustand eines Anwendungspools überwacht, um festzustellen, ob es gestartet wird oder nicht.

Führen Sie die folgenden Schritte aus, um die hohe Verfügbarkeit für IIS 7.0 oder einen webserver mit höherer Version mithilfe von Failoverclustering zu konfigurieren. Die Schritte 3 bis 7 werden unten ausführlicher beschrieben. Das Beispielskript weiter unten in diesem Artikel kann als Beispiel für IIS 7.0 oder eine höhere Version verwendet werden.

  1. Installieren Sie die Webserverrolle auf allen Clusterknoten. Ausführliche Informationen finden Sie im IIS 7-Bereitstellungshandbuch.
  2. Installieren Sie das Failoverclustering-Feature auf allen Clusterknoten, und erstellen Sie den Cluster. Ausführliche Informationen finden Sie im Failoverclusterbereitstellungshandbuch.
  3. Richten Sie eine Dateifreigabe ein, die für die freigegebene IIS-Konfiguration verwendet wird.
  4. Konfigurieren Sie die gemeinsam genutzte IIS-Konfiguration auf allen Clusterknoten.
  5. Konfigurieren Von IIS-Offlinedateien für die freigegebene Konfiguration auf allen Clusterknoten.
  6. Konfigurieren Sie die Website (einschließlich des zugeordneten Anwendungspools), und geben Sie den Speicherort des Inhalts auf einem Clusterknoten an.
  7. Konfigurieren Sie hohe Verfügbarkeit für Ihre Website, indem Sie ein generisches Skript in Failoverclustering erstellen.

Einrichten einer Dateifreigabe, die für die freigegebene IIS-Konfiguration verwendet wird

  1. Erstellen Sie einen Benutzer, der auf die Freigabe zugreift, die für die freigegebene IIS-Konfiguration verwendet wird.
  2. Erstellen Sie die Dateifreigabe. Diese Freigabe wird verwendet, um die gemeinsam genutzte IIS-Konfiguration zu speichern, die von IIS auf allen Clusterknoten gemeinsam genutzt wird. Es gibt mehrere Optionen:
  3. Legen Sie die Berechtigungen für die Freigabe fest, die Sie in Schritt 2 erstellt haben. Erteilen Sie dem Benutzer, den Sie in Schritt 1 mit Vollzugriff erstellt haben, Berechtigungen für die Dateifreigabe und NTFS-Berechtigungen.
  4. Vergewissern Sie sich, dass alle Clusterknoten zur Dateifreigabe navigieren können. Der Pfad zur Dateifreigabe lautet \\<fileserver>\<share>.

Konfigurieren der freigegebenen IIS-Konfiguration auf allen Clusterknoten

Notiz

Es besteht ein Problem mit der gemeinsam genutzten IIS-Konfiguration unter Windows 2008 Server aufgrund fehlender Berechtigungen für die Application Host Helper Service. Damit die gemeinsame Konfiguration funktioniert, müssen Sie diese Schritte ausführen, wenn Sie die gemeinsam genutzte IIS-Konfiguration auf Windows 2008 Server einrichten.

  1. Öffnen Sie eine Eingabeaufforderung als Administrator.

  2. Führen Sie den folgenden Befehl aus:

    net stop apphostsvc
    
  3. Führen Sie den folgenden Befehl aus:

    sc privs apphostsvc SeChangeNotifyPrivilege/SeTcbPrivilege/SeImpersonatePrivilege
    
  4. Führen Sie den folgenden Befehl aus:

    net start apphostsvc
    

Nachdem Sie diese Schritte auf jedem Windows 2008-Server im Cluster ausgeführt haben, fahren Sie mit der Einrichtung der freigegebenen IIS-Konfiguration fort, wie in diesem Abschnitt beschrieben.

Exportieren Sie auf einem der Clusterknoten die freigegebene Konfiguration in die Dateifreigabe:

  1. Navigieren Sie zu "Verwaltungstools", und wählen Sie dann Internetinformationsdienste (IIS)-Manager aus.
  2. Wählen Sie im linken Bereich den Servernamenknoten aus.
  3. Doppelklicken Sie auf das Symbol Gemeinsame Konfiguration.
  4. Wählen Sie auf der Seite "Freigegebene Konfiguration" im Bereich "Aktionen" (im rechten Bereich) die Option "Exportieren" aus, um die Konfigurationsdateien vom lokalen Computer an einen anderen Speicherort zu exportieren.
  5. Geben Sie im Dialogfeld "Konfiguration exportieren" den Pfad der Dateifreigabe (\\<fileserver>\<share>) in das Feld "Physischer Pfad " ein.
  6. Wählen Sie "Verbinden unter" aus, und geben Sie dann den Benutzernamen und das Kennwort für das Benutzerkonto ein, das Zugriff auf die Freigabe hat, in der die freigegebene Konfiguration gespeichert ist, und wählen Sie dann "OK" aus. Dieses Konto wird für den Zugriff auf die Freigabe verwendet. Sie sollten ein eingeschränktes Active Directory-Konto verwenden, das nicht der Domänenadministrator ist.
  7. Geben Sie im Dialogfeld "Konfiguration exportieren" ein Kennwort ein, das zum Schutz der Verschlüsselungsschlüssel verwendet wird, und wählen Sie dann "OK" aus.
  8. Aktivieren Sie auf der Seite "Freigegebene Konfiguration " das Kontrollkästchen "Freigegebene Konfiguration aktivieren".
  9. Geben Sie den physischen Pfad, das Benutzerkonto und das Kennwort ein, das Sie zuvor eingegeben haben, und wählen Sie dann im Bereich "Aktionen" die Option "Übernehmen" aus.
  10. Geben Sie im Dialogfeld "Kennwort für Verschlüsselungsschlüssel" das zuvor festgelegte Kennwort für den Verschlüsselungsschlüssel ein, und wählen Sie dann "OK" aus.
  11. Wählen Sie im Dialogfeld "Freigegebene Konfiguration" "OK" aus.
  12. Klicken Sie auf OK.

Verwenden Sie auf jedem der anderen Clusterknoten die freigegebene Konfiguration, die Sie soeben in die Dateifreigabe exportiert haben:

  1. Navigieren Sie zu "Verwaltungstools", und wählen Sie dann Internetinformationsdienste (IIS)-Manager aus.
  2. Wählen Sie den Servernamenknoten aus.
  3. Doppelklicken Sie auf das Symbol Gemeinsame Konfiguration.
  4. Aktivieren Sie auf der Seite "Freigegebene Konfiguration " das Kontrollkästchen "Freigegebene Konfiguration aktivieren".
  5. Geben Sie den physischen Pfad der Dateifreigabe (\\<fileserver>\<share>), das Benutzerkonto und das Kennwort ein, das Sie zuvor eingegeben haben, und wählen Sie dann im Bereich "Aktionen" die Option "Übernehmen" aus.
  6. Geben Sie im Dialogfeld "Kennwort für Verschlüsselungsschlüssel" das zuvor festgelegte Kennwort für den Verschlüsselungsschlüssel ein, und wählen Sie dann "OK" aus.
  7. Wählen Sie im Dialogfeld "Freigegebene Konfiguration" "OK" aus.
  8. Wählen Sie OK aus.

Notiz

Weitere Informationen zum Einrichten freigegebener Konfigurationen in IIS finden Sie unter "Freigegebene Konfiguration".

Konfigurieren von IIS-Offlinedateien für die gemeinsame Konfiguration auf allen Clusterknoten

Aktivieren Sie auf jedem Clusterknoten Offlinedateien:

  1. Installieren der Desktopdarstellung

    1. Navigieren Sie zu "Verwaltungstools", und wählen Sie dann Server-Manager aus.
    2. Wählen Sie im linken Bereich "Features" aus.
    3. Wählen Sie im rechten Bereich "Features hinzufügen" aus.
    4. Führen Sie eine der folgenden Aktionen aus, je nach Ihrer Windows-Version:
      • Informationen zu Windows Server 2016 finden Sie unter Install Server with Desktop Experience.
      • Wählen Sie für Windows Server 2102 und 2012 R2 die Option "Desktopdarstellung " unter "Benutzeroberflächen und Infrastrukturen " in der Liste der Features aus.
      • Wählen Sie für Windows Server 2008 und 2008 R2 die Option "Desktopdarstellung" aus.
    5. Wählen Sie "Installieren " aus, um die Desktopdarstellung zu installieren.
    6. Starten Sie den Computer neu.
  2. Führen Sie eines der folgenden Verfahren aus:

    • Wählen Sie für Windows Server 2012, 2012 R2 und 2016 das Synchronisierungscenter in Systemsteuerung und dann "Offlinedateien verwalten" aus.
    • Wählen Sie für Windows Server 2008 und 2008 R2 Offlinedateien in Systemsteuerung aus.
  3. Wählen Sie "Offlinedateien aktivieren" aus. Starten Sie den Computer zurzeit nicht neu.

  4. Stellen Sie sicher, dass der Cache schreibgeschützt ist. Führen Sie dazu den folgenden Befehl an einer Eingabeaufforderung mit erhöhten Rechten aus:

    REG ADD "HKLM\System\CurrentControlSet\Services\CSC\Parameters" /v ReadOnlyCache /t REG_DWORD /d 1 /f
    
  5. Starten Sie den Computer neu.

  6. Navigieren Sie vom Computer zum Dateiserver. Klicken Sie mit der rechten Maustaste auf die Freigabe, die die freigegebene IIS-Konfiguration enthält, und wählen Sie dann "Immer offline verfügbar" aus.

    Notiz

    Wenn Sie die Dateifreigabe so einrichten, dass sie auf demselben Failovercluster hoch verfügbar ist, der IIS-Knoten hostet, wird die Option "Offline immer verfügbar " nicht angezeigt, wenn Sie mit der rechten Maustaste auf die Freigabe klicken, wenn der Clusterknoten, auf dem Sie sich befinden, den hoch verfügbaren Dateiserver hostet. Sie müssen die hoch verfügbare Dateiserveranwendung auf einen anderen Knoten verschieben.

  7. Öffnen Sie in Systemsteuerung Offlinedateien. Wählen Sie "Synchronisierungscenter öffnen" und dann "Zeitplan" aus.

  8. Planen Sie eine Offlinedateisynchronisierung für jeden Tag oder entsprechend Ihren Anforderungen. Sie können die Offlinesynchronisierung auch so konfigurieren, dass sie alle paar Minuten ausgeführt wird. Auch wenn Sie keinen Zeitplan einrichten, wird die Änderung auf dem Webserver angezeigt, wenn Sie etwas in der Datei Applicationhost.config ändern.

Notiz

Weitere Informationen zum Konfigurieren von Offlinedateien für eine freigegebene Konfiguration in IIS finden Sie unter "Offlinedateien für freigegebene Konfiguration".

Konfigurieren der Website und Angeben des Speicherorts des Inhalts auf einem Clusterknoten

Suchen Sie den Clusterknoten, der die Clusterdatenträgerressource besitzt, in der die Websiteinhaltsdateien verbleiben:

  1. Navigieren Sie zu "Verwaltungstools", und wählen Sie dann "Failovercluster-Manager" aus.
  2. Verbinden mit dem Cluster Wenn Sie sich auf einem der Clusterknoten befinden, wird der Cluster automatisch in der Liste angezeigt.
  3. Suchen Sie unter "Speicher" die Datenträgerressource, auf der sich der Inhalt der Webseite befindet. Erweitern Sie dazu die Speicherstruktur für die Datenträgerressource. Stellen Sie sicher, dass der Speicher nicht von einer anderen Hochverfügbarkeitsanwendung auf dem Cluster verwendet wird. Sie finden den Speicher unter "Verfügbarer Speicher".
  4. Der Clusterknoten, auf dem diese Ressource online ist. Sie konfigurieren IIS auf diesem Clusterknoten.
  5. Der Name der Clusterdatenträgerressource.

Sie verwenden dies für die Inhaltsdateien. Konfigurieren Sie auf dem Clusterknoten, auf dem die Ressource online ist, den Webserver so, dass der freigegebene Datenträger für Websiteinhalte verwendet wird:

  1. Navigieren Sie zu "Verwaltungstools", und wählen Sie dann Internetinformationsdienste (IIS)-Manager aus.
  2. Erweitern Sie im linken Bereich den Servernamenknoten.
  3. Erweitern Sie "Websites", und wählen Sie dann unter "Websites" die Website aus, die Sie konfigurieren.
  4. Wählen Sie im rechten Bereich unter "Website verwalten" die Option "Erweiterte Einstellungen" aus.
  5. Suchen Sie die Eigenschaft "Physischer Pfad " unter " Allgemeine Einstellungen", und geben Sie dann den Speicherort ein, an dem sich die Websiteinhaltsdateien befinden. Dies ist der Speicherort der Clusterdatenträgerressource, die Sie in Schritt 5 des vorherigen Verfahrens angegeben haben.
  6. Klicken Sie auf OK.

Konfigurieren der hohen Verfügbarkeit für Ihre Website durch Erstellen eines generischen Skripts im Failovercluster-Manager

Richten Sie für den letzten Schritt zum Konfigurieren der hohen Verfügbarkeit für IIS-Webserver die generische Skriptressource ein, die zum Überwachen der Website und des Anwendungspools für die Website verwendet wird:

  1. Kopieren Sie auf jedem Clusterknoten das Skript, das am Ende dieses Artikels bereitgestellt wird, in Windows\System32\inetsrv\Clusweb7.vbs.

  2. Standardmäßig überwacht das Skript eine Website mit dem Namen "Standardwebsite" und einen Anwendungspool mit dem Namen DefaultAppPool. Wenn diese nicht die richtige Website und der richtige Anwendungspool sind, ändern Sie die SITE_NAME and APP_POOL_NAME Variablen. Stellen Sie sicher, dass derselbe Website- und Anwendungspool im Skript auf allen Clusterknoten vorhanden ist.

    Notiz

    Bei den Namen wird die Groß-/Kleinschreibung beachtet.

  3. Navigieren Sie zu "Verwaltungstools", und wählen Sie dann "Failovercluster-Manager" aus.

  4. Verbinden mit dem Cluster Wenn Sie sich auf einem der Clusterknoten befinden, wird der Cluster automatisch in der Liste angezeigt.

  5. Führen Sie eines der folgenden Verfahren aus:

    • Klicken Sie für Windows Server 2012, 2012 R2 und 2016 mit der rechten Maustaste auf "Rollen ", und wählen Sie dann "Rolle konfigurieren" aus, um sie zu erstellen.
    • Klicken Sie für Windows Server 2008 und 2008 R2 mit der rechten Maustaste auf den Cluster, und wählen Sie dann "Dienst oder Anwendung konfigurieren" aus. Ein Assistent erstellt die Arbeitsauslastung mit hoher Verfügbarkeit.
  6. Wählen Sie "Generisches Skript" aus.

  7. Wählen Sie die Skriptdatei aus.%systemroot%\System32\Inetsrv\clusweb7.vbs

  8. Legen Sie den Namen des Clientzugriffspunkts (CAP) auf den Websitenamen fest, den Clients zum Herstellen einer Verbindung mit der Website mit hoher Verfügbarkeit verwenden. Geben Sie die statischen IPs an, die für die Website CAP verwendet werden sollen. Wenn Sie dhcp (Dynamic Host Configuration Protocol) verwenden, wird diese Option nicht angezeigt.

  9. Wählen Sie im Schritt "Speicher auswählen" den freigegebenen Clusterdatenträger aus, auf dem sich die Websiteinhaltsdateien befinden. Der Speicher sollte von jeder anderen Hochverfügbarkeitsanwendung auf dem Cluster nicht verwendet werden.

    Notiz

    Wenn die dateifreigabe, die für die freigegebene IIS-Konfiguration verwendet wird, auf demselben Cluster gehostet wird, sollte hier eine andere Datenträgerressource verwendet werden.

  10. Nachdem Sie die Einstellungen bestätigt haben, erstellt der Assistent die Clustergruppe, Clusterressourcen und die Abhängigkeiten zwischen den Ressourcen, und bringt die Ressourcen dann online.

    Notiz

    Führen Sie die gleichen Schritte wie oben aus, um mehrere Websites mit hoher Verfügbarkeit auf demselben Failovercluster zu hosten. Verwenden Sie jedoch eine andere Skriptdatei für jede Website und einen anderen gruppierten freigegebenen Speicher. Verwenden Sie beispielsweise "%systemroot%\System32\Inetsrvclusweb7.vbs" für die erste Website, "clweb7-2.vbs" für die zweite, "clweb7-3.vbs" für den dritten usw. Jede Skriptdatei überwacht eine andere Website und einen anderen Anwendungspool.

Das folgende Skript dient nur zu Beispielzwecken und wird von Microsoft nicht explizit unterstützt. Die Verwendung dieses Skripts in einer IIS 7.0- oder einer höheren Clusterumgebung erfolgt auf eigene Gefahr.

'<begin script sample>
'This script provides high availability for IIS websites
'By default, it monitors the "Default Web Site" and "DefaultAppPool"
'To monitor another website, change the SITE_NAME below
'To monitor another application pool, change the APP_POOL_NAME below
'More thorough and application-specific health monitoring logic can be added to the script if needed

Option Explicit

DIM SITE_NAME
DIM APP_POOL_NAME
Dim START_WEB_SITE
Dim START_APP_POOL
Dim SITES_SECTION_NAME
Dim APPLICATION_POOLS_SECTION_NAME
Dim CONFIG_APPHOST_ROOT
Dim STOP_WEB_SITE

'Note:
'Replace this with the site and application pool you want to configure high availability for
'Make sure that the same website and application pool in the script exist on all cluster nodes. Note that the names are case-sensitive.
SITE_NAME = "Default Web Site"
APP_POOL_NAME = "DefaultAppPool"

START_WEB_SITE = 0
START_APP_POOL = 0
STOP_WEB_SITE  = 1
SITES_SECTION_NAME = "system.applicationHost/sites"
APPLICATION_POOLS_SECTION_NAME = "system.applicationHost/applicationPools"
CONFIG_APPHOST_ROOT = "MACHINE/WEBROOT/APPHOST"

'Helper script functions
'Find the index of the website on this node
Function FindSiteIndex(collection, siteName)
    Dim i
    FindSiteIndex = -1

    For i = 0 To (CInt(collection.Count) - 1)
        If collection.Item(i).GetPropertyByName("name").Value = siteName Then
            FindSiteIndex = i
            Exit For
        End If
    Next
End Function

'Find the index of the application pool on this node
Function FindAppPoolIndex(collection, appPoolName)
    Dim i
    FindAppPoolIndex = -1

    For i = 0 To (CInt(collection.Count) - 1)
        If collection.Item(i).GetPropertyByName("name").Value = appPoolName Then
            FindAppPoolIndex = i
            Exit For
        End If
    Next
End Function

'Get the state of the website
Function GetWebSiteState(adminManager, siteName)

    Dim sitesSection, sitesSectionCollection, siteSection, index, siteMethods, startMethod, executeMethod
    Set sitesSection = adminManager.GetAdminSection(SITES_SECTION_NAME, CONFIG_APPHOST_ROOT)
    Set sitesSectionCollection = sitesSection.Collection

    index = FindSiteIndex(sitesSectionCollection, siteName)
    If index = -1 Then
        GetWebSiteState = -1
    End If

    Set siteSection = sitesSectionCollection(index)
    GetWebSiteState = siteSection.GetPropertyByName("state").Value
End Function

'Get the state of the ApplicationPool
Function GetAppPoolState(adminManager, appPool)
    Dim configSection, index, appPoolState

    set configSection = adminManager.GetAdminSection(APPLICATION_POOLS_SECTION_NAME, CONFIG_APPHOST_ROOT)
    index = FindAppPoolIndex(configSection.Collection, appPool)

    If index = -1 Then
        GetAppPoolState = -1
    End If

    GetAppPoolState = configSection.Collection.Item(index).GetPropertyByName("state").Value
End Function

'Start the w3svc service on this node
Function StartW3SVC()
    Dim objWmiProvider
    Dim objService
    Dim strServiceState
    Dim response

    'Check to see if the service is running
    set objWmiProvider = GetObject("winmgmts:/root/cimv2")
    set objService = objWmiProvider.get("win32_service='w3svc'")
    strServiceState = objService.state

    If ucase(strServiceState) = "RUNNING" Then
        StartW3SVC = True
    Else
        'If the service is not running, try to start it
        response = objService.StartService()

        'response = 0  or 10 indicates that the request to start was accepted
        If ( response <> 0 ) and ( response <> 10 ) Then
            StartW3SVC = False
        Else
            StartW3SVC = True
        End If
    End If
End Function

'Start the application pool for the website
Function StartAppPool()
    Dim ahwriter, appPoolsSection, appPoolsCollection, index, appPool, appPoolMethods, startMethod, callStartMethod
    Set ahwriter = CreateObject("Microsoft.ApplicationHost.WritableAdminManager")

    Set appPoolsSection = ahwriter.GetAdminSection(APPLICATION_POOLS_SECTION_NAME, CONFIG_APPHOST_ROOT)
    Set appPoolsCollection = appPoolsSection.Collection
    index = FindAppPoolIndex(appPoolsCollection, APP_POOL_NAME)
    Set appPool = appPoolsCollection.Item(index)

    'See if it is already started
    If appPool.GetPropertyByName("state").Value = 1 Then
        StartAppPool = True
        Exit Function
    End If

    'Try To start the application pool
    Set appPoolMethods = appPool.Methods
    Set startMethod = appPoolMethods.Item(START_APP_POOL)
    Set callStartMethod = startMethod.CreateInstance()
    callStartMethod.Execute()

    'If started return true, otherwise return false
    If appPool.GetPropertyByName("state").Value = 1 Then
        StartAppPool = True
    Else
        StartAppPool = False
    End If
End Function

'Start the website
Function StartWebSite()
    Dim ahwriter, sitesSection, sitesSectionCollection, siteSection, index, siteMethods, startMethod, executeMethod
    Set ahwriter = CreateObject("Microsoft.ApplicationHost.WritableAdminManager")
    Set sitesSection = ahwriter.GetAdminSection(SITES_SECTION_NAME, CONFIG_APPHOST_ROOT)
    Set sitesSectionCollection = sitesSection.Collection
    index = FindSiteIndex(sitesSectionCollection, SITE_NAME)
    Set siteSection = sitesSectionCollection(index)

    if siteSection.GetPropertyByName("state").Value = 1 Then
        'Site is already started
        StartWebSite = True
        Exit Function
    End If

    'Try to start site
    Set siteMethods = siteSection.Methods
    Set startMethod = siteMethods.Item(START_WEB_SITE)
    Set executeMethod = startMethod.CreateInstance()
    executeMethod.Execute()

    'Check to see if the site started, if not return false
    If siteSection.GetPropertyByName("state").Value = 1 Then
        StartWebSite = True
    Else
        StartWebSite = False
    End If
End Function

'Stop the website
Function StopWebSite()
    Dim ahwriter, sitesSection, sitesSectionCollection, siteSection, index, siteMethods, startMethod, executeMethod, autoStartProperty
    Set ahwriter = CreateObject("Microsoft.ApplicationHost.WritableAdminManager")
    Set sitesSection = ahwriter.GetAdminSection(SITES_SECTION_NAME, CONFIG_APPHOST_ROOT)
    Set sitesSectionCollection = sitesSection.Collection
    index = FindSiteIndex(sitesSectionCollection, SITE_NAME)
    Set siteSection = sitesSectionCollection(index)

    'Stop the site
    Set siteMethods = siteSection.Methods
    Set startMethod = siteMethods.Item(STOP_WEB_SITE)
    Set executeMethod = startMethod.CreateInstance()
    executeMethod.Execute()
End Function

'Cluster resource entry points. More details here:
'http://msdn.microsoft.com/en-us/library/aa372846(VS.85).aspx
'Cluster resource Online entry point
'Make sure the website and the application pool are started
Function Online( )
    Dim bOnline
    'Make sure w3svc is started
    bOnline = StartW3SVC()

    If bOnline <> True Then
        Resource.LogInformation "The resource failed to come online because w3svc could not be started."
        Online = False
        Exit Function
    End If

    'Make sure the application pool is started
    bOnline = StartAppPool()
    If bOnline <> True Then
        Resource.LogInformation "The resource failed to come online because the application pool could not be started."
        Online = False
        Exit Function
    End If

    'Make sure the website is started
    bOnline = StartWebSite()
    If bOnline <> True Then
        Resource.LogInformation "The resource failed to come online because the web site could not be started."
        Online = False
        Exit Function
    End If

    Online = true
End Function

'Cluster resource offline entry point
'Stop the website
Function Offline( )
    StopWebSite()
    Offline = true
End Function

'Cluster resource LooksAlive entry point
'Check for the health of the website and the application pool
Function LooksAlive( )
    Dim adminManager, appPoolState, configSection, i, appPoolName, appPool, index
    i = 0
    Set adminManager  = CreateObject("Microsoft.ApplicationHost.AdminManager")
    appPoolState = -1

    'Get the state of the website
    if GetWebSiteState(adminManager, SITE_NAME) <> 1 Then
        Resource.LogInformation "The resource failed because the " & SITE_NAME & " web site is not started."
        LooksAlive = false
        Exit Function
    End If

    'Get the state of the Application Pool
    if GetAppPoolState(adminManager, APP_POOL_NAME) <> 1 Then
         Resource.LogInformation "The resource failed because Application Pool " & APP_POOL_NAME & " is not started."
         LooksAlive = false  
         Exit Function
    End if

    'Web site and Application Pool state are valid return true
    LooksAlive = true
End Function

'Cluster resource IsAlive entry point
'Do the same health checks as LooksAlive
'If a more thorough than what we do in LooksAlive is required, this should be performed here
Function IsAlive()
    IsAlive = LooksAlive
End Function

'Cluster resource Open entry point
Function Open()
    Open = true
End Function

'Cluster resource Close entry point
Function Close()
    Close = true
End Function

'Cluster resource Terminate entry point
Function Terminate()
    Terminate = true
End Function
'<end script sample>