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öhere Versionen
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 hat Microsoft generische Ressourcenüberwachungskomponenten bereitgestellt, um Hochverfügbarkeitswebserverinstanzen mithilfe der Microsoft Clustering-Infrastruktur zu unterstützen. Allerdings war benutzerdefinierter Code erforderlich, um das Potenzial einer solchen Lösung voll auszuschöpfen. 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 Server-Failoverclustering verwendet, müssen Sie einen benutzerdefinierten Code (Skripterstellung) verwenden, um ein solches Hochverfügbarkeitsszenario zu ermöglichen. Wenn Sie dies tun, können Benutzer das Setup an ihre Anforderungen anpassen. wodurch sie die volle Kontrolle über die Hochverfügbarkeitsintegration von Webanwendungen erhalten. Darüber hinaus bieten die in IIS 7.0 eingeführten Skriptschnittstellen für Verwaltung und Überwachung eine umfangreichere 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 höheren Version.

Administratoren sollten 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, sorgfältig bewerten, anstatt Failoverclustering zu verwenden. 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, parallele Updates und Rollbacks zu unterstützen, während weiterhin Hochverfügbarkeit von Webanwendungen bereitgestellt wird. 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 Clustern 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, kann der Hostingprozess eines bestimmten Anwendungspools beendet worden sein, oder die Anwendung löst 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. Im Folgenden finden Sie ein Beispielskript, das den Zustand eines Anwendungspools überwacht, um zu ermitteln, ob er gestartet wurde oder nicht.

Führen Sie die folgenden Schritte aus, um Hochverfügbarkeit für IIS 7.0 oder einen Webserver höher 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. Weitere Informationen finden Sie im IIS 7-Bereitstellungshandbuch.
  2. Installieren Sie das Failoverclusteringfeature auf allen Clusterknoten, und erstellen Sie den Cluster. Weitere Informationen finden Sie im Bereitstellungshandbuch für Failovercluster.
  3. Richten Sie eine Dateifreigabe ein, die für die freigegebene IIS-Konfiguration verwendet wird.
  4. Konfigurieren Sie die freigegebene IIS-Konfiguration auf allen Clusterknoten.
  5. Konfigurieren Sie 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 ihres Inhalts auf einem Clusterknoten an.
  7. Konfigurieren Sie Hochverfügbarkeit für Ihre Website, indem Sie ein generisches Skript im 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 freigegebene 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 erstellt haben, Vollzugriffsberechtigungen für die Dateifreigabe und NTFS-Berechtigungen.
  4. Vergewissern Sie sich, dass alle Clusterknoten zur Dateifreigabe navigieren können. Der Pfad zur Dateifreigabe ist \\<fileserver>\<share>.

Konfigurieren der freigegebenen IIS-Konfiguration auf allen Clusterknoten

Hinweis

Es gibt ein Problem mit der freigegebenen IIS-Konfiguration unter Windows 2008 Server aufgrund fehlender Berechtigungen für Application Host Helper Service. Damit die freigegebene Konfiguration funktioniert, müssen Sie diese Schritte ausführen, wenn Sie die freigegebene IIS-Konfiguration unter 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, fahren Sie mit dem Einrichten 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 Verwaltung, 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 Freigegebene 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, 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, die Sie zuvor eingegeben haben, und klicken Sie dann im Bereich Aktionen auf Anwenden.
  10. Geben Sie im Dialogfeld Kennwort für Verschlüsselungsschlüssel das Kennwort für den Verschlüsselungsschlüssel ein, das Sie zuvor festgelegt haben, und wählen Sie dann OK aus.
  11. Wählen Sie im Dialogfeld Freigegebene Konfigurationdie Option 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 Verwaltung, und wählen Sie dann Internetinformationsdienste-Manager (IIS) aus.
  2. Wählen Sie den Servernamenknoten aus.
  3. Doppelklicken Sie auf das Symbol Freigegebene 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, die Sie zuvor eingegeben haben, und wählen Sie dann im Bereich Aktionendie Option Übernehmen aus.
  6. Geben Sie im Dialogfeld Kennwort für Verschlüsselungsschlüssel das Kennwort für den Verschlüsselungsschlüssel ein, das Sie zuvor festgelegt haben, und wählen Sie dann OK aus.
  7. Wählen Sie im Dialogfeld Freigegebene Konfigurationdie Option OK aus.
  8. Wählen Sie OK aus.

Hinweis

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

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

Aktivieren Sie auf jedem Clusterknoten Offlinedateien:

  1. Installieren der Desktopdarstellung

    1. Navigieren Sie zu Verwaltung, 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 je nach Windows-Version einen der folgenden Schritte aus:
      • Informationen Windows Server 2016 finden Sie unter Installieren von Server mit Desktopdarstellung.
      • Wählen Sie für Windows Server 2102 und 2012 R2 in der Featureliste unter Benutzeroberflächen und Infrastrukturen die Option Desktopdarstellung aus.
      • Wählen Sie für Windows Server 2008 und 2008 R2 Desktopdarstellung aus.
    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:

    • Wählen Sie für Windows Server 2012, 2012 R2 und 2016 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 zu diesem Zeitpunkt 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.

    Hinweis

    Wenn Sie die Dateifreigabe so einrichten, dass sie auf demselben Failovercluster hochverfügbar ist, auf dem IIS-Knoten gehostet werden, 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 hochverfügbaren Dateiserver hostet. Sie müssen die hoch verfügbare Dateiserveranwendung auf einen anderen Knoten verschieben.

  7. Öffnen Sie 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 auf dem Webserver wiedergegeben, wenn Sie etwas in der Applicationhost.config-Datei ändern.

Hinweis

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

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

Suchen Sie den Clusterknoten, der besitzer der Clusterdatenträgerressource ist, in dem die Websiteinhaltsdateien verbleiben:

  1. Navigieren Sie zu Verwaltung, und wählen Sie dann Failovercluster-Manager aus.
  2. Stellen Sie eine Verbindung mit dem Cluster her. Wenn Sie sich auf einem der Clusterknoten befinden, wird der Cluster automatisch in der Liste angezeigt.
  3. Suchen Sie unter Speicher nach der 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 anderen Hochverfügbarkeitsanwendungen im 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 für die Verwendung des freigegebenen Datenträgers für Websiteinhalte:

  1. Navigieren Sie zu Verwaltung, und wählen Sie dann Internetinformationsdienste-Manager (IIS) aus.
  2. Erweitern Sie im linken Bereich den Knoten Servername.
  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 verwaltendie 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, den Sie sich in Schritt 5 des vorherigen Verfahrens notiert haben.
  6. Wählen Sie OK aus.

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

Richten Sie im letzten Schritt zum Konfigurieren der Hochverfü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 die richtige Website und der richtige Anwendungspool sind, ändern Sie die SITE_NAME and APP_POOL_NAME Variablen. Stellen Sie sicher, dass die gleiche Website und derselbe Anwendungspool im Skript auf allen Clusterknoten vorhanden sind.

    Hinweis

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

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

  4. Stellen Sie eine Verbindung mit dem Cluster her. 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 dann Rolle konfigurieren aus, um sie zu erstellen.
    • Klicken Sie unter 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 Hochverfügbarkeitsworkload.
  6. Wählen Sie Generisches Skript aus.

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

  8. Legen Sie den Namen des Clientzugriffspunkts (Client Access Point, CAP) auf den Websitenamen fest, den Clients zum Herstellen einer Verbindung mit der Hochverfügbarkeitswebsite verwenden. Geben Sie die statischen IP-Adressen an, die für die CAP der Website 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 im Cluster nicht verwendet werden.

    Hinweis

    Wenn die Dateifreigabe, die für die freigegebene IIS-Konfiguration verwendet wird, im selben 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.

    Hinweis

    Führen Sie die gleichen Schritte wie oben aus, um mehrere Hochverfügbarkeitswebsites im gleichen Failovercluster zu hosten. Verwenden Sie jedoch eine andere Skriptdatei für jede Website und einen anderen gruppierten freigegebenen Speicher. Verwenden Sie in z. %systemroot%\System32\Inetsrv B.clusweb7.vbs für die erste Website, clweb7-2.vbs für die zweite website ,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>