Konfigurieren von 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 Serverfailovercluster (WSFC) konfigurieren.

Ursprüngliche Produktversion:   Windows Server 2008 und höher, 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 Serverfailovercluster.

Weitere Informationen

In früheren Versionen von Internetinformationsdienste hat Microsoft generische Ressourcenüberwachungskomponenten bereitgestellt, um hochverfügbare Webserverinstanzen mithilfe der Microsoft Clustering-Infrastruktur zu unterstützen. Benutzerdefinierter Code war jedoch erforderlich, um das Potenzial einer solchen Lösung vollständig zu nutzen. Außerdem erfüllten die von Microsoft bereitgestellten generischen Skripts die Kundenanforderungen nicht. Um IIS 7.0 oder eine höhere Version in einer Clusterumgebung zu konfigurieren, die Windows Serverfailoverclustering verwendet, müssen Sie einen benutzerdefinierten Code (Skripting) verwenden, um ein solches Hochverfügbarkeitsszenario zu aktivieren. Wenn Sie dies tun, können Benutzer das Setup an ihre Anforderungen anpassen. Dies ermöglicht ihnen die vollständige Kontrolle über die Integration von Webanwendungen mit hoher Verfügbarkeit. Darüber hinaus bieten die Skriptschnittstellen für Verwaltung und Überwachung, die in IIS 7.0 eingeführt wurden, eine umfassendere Umgebung als die zuvor bereitgestellten Skripts.

Hinweis

Die IIS 7.0-Installationsdateien enthalten fälschlicherweise die Clusweb.vbs und Clusftp.vbs Skriptdateien, die in IIS 6.0 für ADMINISTRATIVE IIS-Clusteraufgaben verwendet werden. Verwenden Sie diese Skripts nicht mit IIS 7.0 oder einer neueren 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, auf denen IIS 7.0 oder höher ausgeführt wird, 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 besteht darin, dass es in einer NLB-IIS-Umgebung wesentlich einfacher sein kann, rollierende Updates und Rollbacks zu unterstützen und gleichzeitig eine hohe Verfügbarkeit von Webanwendungen zu bieten. Weitere Informationen zur Verwendung von IIS 7.0 oder einer neueren 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) möglicherweise aktiv sind und ausgeführt werden, könnte der Hostingprozess eines bestimmten Anwendungspools beendet worden sein, oder die Anwendung löst möglicherweise INTERNE SERVER-HTTP-Fehler aus. Das Clustering 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. Unten sehen Sie ein Beispielskript, das den Status eines Anwendungspools überwacht, um festzustellen, ob er gestartet wurde oder nicht.

Führen Sie die folgenden Schritte aus, um die hohe Verfügbarkeit für iis 7.0 oder einen neueren Versionswebserver mithilfe von Failoverclustering zu konfigurieren. Die Schritte 3 bis 7 werden weiter 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 Failovercluster-Bereitstellungshandbuch.
  3. Richten Sie eine Dateifreigabe ein, die für die gemeinsam genutzte IIS-Konfiguration verwendet wird.
  4. Konfigurieren Sie die gemeinsam genutzte IIS-Konfiguration auf allen Clusterknoten.
  5. Konfigurieren Sie IIS-Offlinedateien für die gemeinsame 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 im Failoverclustering erstellen.

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

  1. Erstellen Sie einen Benutzer, der auf die Freigabe zugreift, die für die gemeinsam genutzte 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. Weisen Sie dem Benutzer, den Sie in Schritt 1 erstellt haben, Vollzugriffsberechtigungen für die Dateifreigabe und NTFS-Berechtigungen zu.
  4. Vergewissern Sie sich, dass alle Clusterknoten zur Dateifreigabe navigieren können. Der Pfad zur Dateifreigabe lautet \\<fileserver>\<share> .

Konfigurieren der gemeinsam genutzten IIS-Konfiguration auf allen Clusterknoten

Hinweis

Es gibt ein Problem mit der gemeinsam genutzten IIS-Konfiguration auf Windows 2008 Server aufgrund fehlender Berechtigungen für die Application Host Helper Service . Damit die freigegebene 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 administrative Eingabeaufforderung.

  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, setzen Sie die Einrichtung der gemeinsam genutzten IIS-Konfiguration wie in diesem Abschnitt beschrieben fort.

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

  1. Navigieren Sie zu "Verwaltungstools", und wählen Sie dann Internetinformationsdienste -Manager (IIS) 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 "Konfiguration 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 Als 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 zuvor eingegebene Kennwort ein, 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 Verschlüsselungsschlüsselkennwort ein, und wählen Sie dann OK aus.
  11. Wählen Sie im Dialogfeld "Freigegebene Konfiguration" OK aus.
  12. Wählen Sie OK aus.

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 -Manager (IIS) 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> ), des Benutzerkontos und des Kennworts 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 Verschlüsselungsschlüsselkennwort ein, und wählen Sie dann OK aus.
  7. Wählen Sie im Dialogfeld "Freigegebene Konfiguration" OK aus.
  8. Wählen Sie OK aus.

Hinweis

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

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

Aktivieren Sie auf jedem Clusterknoten Offlinedateien:

  1. Installieren der Desktopumgebung

    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 Ihren Windows Version:
      • For Windows Server 2016, visit Install Server with Desktop Experience.
      • For Windows Server 2102 and 2012 R2, choose Desktop Experience under User Interfaces and Infrastructures in the features list.
      • For Windows Server 2008 and 2008 R2, choose Desktop Experience.
    5. Wählen Sie "Installieren" aus, um die Desktopdarstellung zu installieren.
    6. Starten Sie den Computer neu.
  2. Führen Sie einen der folgenden Schritte aus:

    • For Windows Server 2012, 2012 R2 and 2016, select Sync Center in control panel, and then select Manage offline files.
    • Wählen Sie für Windows Server 2008 und 2008 R2 in der Systemsteuerung Offlinedateien aus.
  3. Wählen Sie Offlinedateien aktivieren aus. Starten Sie den Computer zu diesem Zeitpunkt nicht neu.

  4. Stellen Sie sicher, dass der Cache auf schreibgeschützt festgelegt 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 gemeinsam genutzte IIS-Konfiguration enthält, und wählen Sie dann "Immer offline verfügbar" aus.

    Hinweis

    Wenn Sie die Dateifreigabe so einrichten, dass sie auf demselben Failovercluster, der IIS-Knoten hostet, hoch verfügbar ist, wird die Option "Immer verfügbar offline" 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 der Systemsteuerung Offlinedateien. Wählen Sie "Synchronisierungscenter öffnen" und dann "Zeitplan" aus.

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

Hinweis

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

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

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

  1. Navigieren Sie zu "Verwaltungstools", und wählen Sie dann Failovercluster-Manager aus.
  2. Verbinden zum Cluster. Wenn Sie sich auf einem der Clusterknoten befinden, wird der Cluster automatisch in der Liste angezeigt.
  3. Suchen Sie unter Storage die Datenträgerressource, auf der sich der Webseiteninhalt 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ügbar Storage.
  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 sich die Ressource online befindet, den Webserver so, dass er den freigegebenen Datenträger für Websiteinhalte verwendet:

  1. Navigieren Sie zu "Verwaltungstools", und wählen Sie dann Internetinformationsdienste -Manager (IIS) 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 "Erweiterte Einstellungen" unter Website verwalten 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. Wählen Sie OK aus.

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 dies nicht der richtige Website- und Anwendungspool ist, ä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.

    Hinweis

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

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

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

  5. Führen Sie einen der folgenden Schritte aus:

    • Klicken Sie für Windows Server 2012 2012 R2 und 2016 mit der rechten Maustaste auf "Rollen", und wählen Sie "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 Workload 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 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 Storage auswählen den freigegebenen Clusterdatenträger aus, auf dem sich die Websiteinhaltsdateien befinden. Der Speicher sollte von keiner anderen Hochverfügbarkeitsanwendung auf dem Cluster verwendet werden.

    Hinweis

    Wenn die Dateifreigabe, die für die gemeinsam genutzte 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, die Clusterressourcen und die Abhängigkeiten zwischen den Ressourcen und bringt die Ressourcen dann online.

    Hinweis

    Um mehrere Websites mit hoher Verfügbarkeit auf demselben Failovercluster zu hosten, führen Sie die gleichen Schritte wie oben aus. Verwenden Sie jedoch eine andere Skriptdatei für jede Website und einen anderen freigegebenen Clusterspeicher. Verwenden Sie beispielsweise in %systemroot%\System32\Inetsrv clusweb7.vbs für die erste Website, clweb7-2.vbs für die zweite, clweb7-3.vbs für die dritte 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 Clusterumgebung mit IIS 7.0 oder höher erfolgt auf eigenes Risiko.

'<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>