Configuration du service de publication IiS World Wide Web dans un cluster deover de Windows Server

Cet article explique comment configurer Microsoft Internet Information Services (IIS) Service de publication World Wide Web (W3SVC) dans un cluster deoverover Windows Server (WSFC).

Version du produit d’origine :   Windows Server 2008 et versions ultérieures, Internet Information Services 8.0 et versions ultérieures
Numéro de la ko d’origine :   970759

Introduction

Les procédures de cet article s’appliquent uniquement au service de publication World Wide Web. Pour obtenir des instructions sur la configuration du service de publication FTP dans un cluster de failover, voir How to configure FTP for IIS in a Windows Server failover cluster.

Informations supplémentaires

Dans les versions antérieures d’Internet Information Services, Microsoft fournissait des composants génériques de surveillance des ressources pour prendre en charge les instances de serveur Web à haute disponibilité à l’aide de l’infrastructure de clustering Microsoft. Toutefois, du code personnalisé était nécessaire pour pleinement comprendre le potentiel d’une telle solution. En outre, les scripts génériques fournis par Microsoft ne répondent pas aux besoins des clients. Pour configurer IIS 7.0 ou une version ultérieure dans un environnement en cluster qui utilise le clustering deover Windows Server, vous devez utiliser un code personnalisé (script) pour activer un scénario de haute disponibilité. Lorsque vous le faites, les utilisateurs peuvent personnaliser le programme d’installation pour qu’il réponde à leurs besoins. qui leur donne un contrôle total sur l’intégration de haute disponibilité des applications Web. En outre, les interfaces de script pour l’administration et la surveillance qui ont été introduites dans IIS 7.0 fournissent un environnement plus riche que les scripts fournis précédemment.

Notes

Les fichiers d’installation IIS 7.0 incluent à tort les fichiers de script Clusweb.vbs et Clusftp.vbs utilisés dans IIS 6.0 pour les tâches d’administration de cluster IIS. N’utilisez pas ces scripts avec IIS 7.0 ou une version ultérieure.

Nous recommandons aux administrateurs d’évaluer attentivement l’utilisation de l’équilibrage de la charge réseau (NLB) comme méthode principale et préférée pour améliorer l’évolutivité et la disponibilité des applications Web avec plusieurs serveurs exécutant IIS 7.0 ou une version ultérieure, au lieu d’utiliser le clustering deover. L’un des avantages de l’é charge réseau est que tous les serveurs peuvent participer activement à la gestion simultanée des demandes HTTP (HyperText Transfer Protocol) entrantes. Un autre avantage est que dans un environnement NLB IIS, il peut être beaucoup plus facile de prendre en charge les mises à jour et les mises à jour de déploiement tout en fournissant une haute disponibilité des applications Web. Pour plus d’informations sur l’utilisation d’IIS 7.0 ou d’une version ultérieure dans un environnement DLB, consultez les articles suivants :

Il est important de considérer que le clustering IIS au moyen du clustering des services IIS ne garantit pas toujours une solution de haute disponibilité pour les applications Web. Bien que les services IIS (en particulier le service WWW) soient opérationnels, le processus d’hébergement d’un pool d’applications spécifique peut être interrompu ou l’application peut lever des erreurs HTTP de serveur interne. Clustering the Web applications and monitoring their health by using a custom script is the correct and recommended way to achieve a high availability IIS cluster using failover clustering. Vous trouverez ci-dessous un exemple de script qui surveille l’état d’un pool d’applications pour déterminer s’il est démarré ou non.

Pour configurer la haute disponibilité pour IIS 7.0 ou un serveur Web de version ultérieure à l’aide du clustering deover, suivez ces étapes. Les étapes 3 à 7 sont décrites plus en détail ci-dessous. L’exemple de script plus loin dans cet article peut être utilisé comme exemple pour IIS 7.0 ou une version ultérieure.

  1. Installez le rôle serveur Web sur tous les nodes de cluster. Pour plus d’informations, voir le Guide de déploiement IIS 7.
  2. Installez la fonctionnalité de clustering de failover sur tous les nodes de cluster et créez le cluster. Pour plus d’informations, voir guide de déploiement de cluster de failover.
  3. Configurer un partage de fichiers qui sera utilisé pour la configuration partagée IIS.
  4. Configurez la configuration partagée IIS sur tous les nodes de cluster.
  5. Configurez les fichiers hors connexion IIS pour la configuration partagée sur tous les nodes de cluster.
  6. Configurez le site web (y compris le pool d’applications associé) et spécifiez l’emplacement de son contenu sur un nœud de cluster.
  7. Configurez la haute disponibilité de votre site web en créant un script générique dans le clustering deover.

Configurer un partage de fichiers qui sera utilisé pour la configuration partagée IIS

  1. Créez un utilisateur qui accédera au partage qui sera utilisé pour la configuration partagée IIS.
  2. Créez le partage de fichiers. Ce partage sera utilisé pour stocker la configuration partagée IIS qui sera partagée entre IIS sur tous les nodes de cluster. Il existe plusieurs options :
    • Sur un serveur autonome qui ne fait pas partie d’un cluster deover, créez un partage de fichiers.
    • Sur un autre cluster deover Windows Server, créez un partage de fichiers haute disponibilité. Pour plus d’informations, consultez le Guide pas à pas du cluster de failover : configuration d’un cluster de Two-Node de serveur de fichiers.
    • Sur le même cluster deover qui hébergera le site web de haute disponibilité, créez un partage de fichiers haute disponibilité. Pour plus d’informations, consultez le Guide pas à pas du cluster de Two-Node de serveurs de fichiers.
  3. Définissez les autorisations sur le partage que vous avez créé à l’étape 2. Accordez à l’utilisateur que vous avez créé à l’étape 1 des autorisations contrôle total sur le partage de fichiers et les autorisations NTFS.
  4. Confirmez que tous les nodes de cluster peuvent naviguer jusqu’au partage de fichiers. Le chemin d’accès au partage de fichiers est \\<fileserver>\<share> .

Configurer la configuration partagée IIS sur tous les nodes de cluster

Notes

Il existe un problème avec la configuration partagée IIS sur Windows 2008 Server en raison de privilèges manquants pour Application Host Helper Service le . Pour que la configuration partagée fonctionne, vous devez suivre ces étapes lorsque vous définissez la configuration partagée IIS sur Windows 2008 Server.

  1. Ouvrez une invite de commandes d’administration.

  2. Exécutez la commande suivante :

    net stop apphostsvc
    
  3. Exécutez la commande suivante :

    sc privs apphostsvc SeChangeNotifyPrivilege/SeTcbPrivilege/SeImpersonatePrivilege
    
  4. Exécutez la commande suivante :

    net start apphostsvc
    

Une fois ces étapes terminées sur chaque serveur Windows 2008 du cluster, continuez à définir la configuration partagée IIS comme décrit dans cette section.

Sur l’un des nodes de cluster, exporte la configuration partagée vers le partage de fichiers :

  1. Accédez à Outils d’administration, puis sélectionnez Gestionnaire des services Internet (IIS).
  2. Dans le volet gauche, sélectionnez le nœud nom du serveur.
  3. Double-cliquez sur l’icône Configuration partagée.
  4. Dans la page Configuration partagée, sélectionnez Exporter la configuration dans le volet Actions (volet droit) pour exporter les fichiers de configuration de l’ordinateur local vers un autre emplacement.
  5. Dans la boîte de dialogue Exporter la configuration, tapez le chemin d’accès du partage de fichiers ( \\<fileserver>\<share> ) dans la zone Chemin d’accès physique.
  6. Sélectionnez Se connecter en tant que, puis tapez le nom d’utilisateur et le mot de passe du compte d’utilisateur qui a accès au partage dans lequel la configuration partagée est stockée, puis sélectionnez OK. Ce compte sera utilisé pour accéder au partage. Vous devez utiliser un compte Active Directory restreint qui n’est pas l’administrateur de domaine.
  7. Dans la boîte de dialogue Exporter la configuration, tapez un mot de passe qui sera utilisé pour protéger les clés de chiffrement, puis sélectionnez OK.
  8. Dans la page Configuration partagée, activez la case à cocher Activer la configuration partagée.
  9. Tapez le chemin d’accès physique, le compte d’utilisateur et le mot de passe que vous avez entrés précédemment, puis sélectionnez Appliquer dans le volet Actions.
  10. Dans la boîte de dialogue Mot de passe des clés de chiffrement, tapez le mot de passe de la clé de chiffrement que vous avez définie précédemment, puis sélectionnez OK.
  11. Dans la boîte de dialogue Configuration partagée, sélectionnez OK.
  12. Sélectionnez OK.

Sur chacun des autres nodes de cluster, utilisez la configuration partagée que vous avez exportée vers le partage de fichiers :

  1. Accédez à Outils d’administration, puis sélectionnez Gestionnaire des services Internet (IIS).
  2. Sélectionnez le nœud nom du serveur.
  3. Double-cliquez sur l’icône Configuration partagée.
  4. Dans la page Configuration partagée, activez la case à cocher Activer la configuration partagée.
  5. Tapez le chemin d’accès physique du partage de fichiers ( ), le compte d’utilisateur et le mot de passe que vous avez entré précédemment, puis sélectionnez Appliquer dans le \\<fileserver>\<share> volet Actions.
  6. Dans la boîte de dialogue Mot de passe des clés de chiffrement, tapez le mot de passe de la clé de chiffrement que vous avez définie précédemment, puis sélectionnez OK.
  7. Dans la boîte de dialogue Configuration partagée, sélectionnez OK.
  8. Sélectionnez OK.

Notes

Pour plus d’informations sur la configuration des configurations partagées dans IIS, consultez configuration partagée.

Configurer les fichiers hors connexion IIS pour la configuration partagée sur tous les nodes de cluster

Sur chaque nœud de cluster, activez fichiers hors connexion :

  1. Installer l’expérience utilisateur

    1. Accédez aux outils d’administration, puis sélectionnez Gestionnaire de serveur.
    2. Dans le volet gauche, sélectionnez Fonctionnalités.
    3. Sélectionnez Ajouter des fonctionnalités dans le volet droit.
    4. Pour votre version de Windows, faites l’une des choses suivantes :
      • Pour Windows Server 2016, visitez Install Server avec Expérience utilisateur.
      • Pour Windows Server 2102 et 2012 R2, choisissez Expérience utilisateur sous Interfaces utilisateur et Infrastructures dans la liste des fonctionnalités.
      • Pour Windows Server 2008 et 2008 R2, choisissez Expérience utilisateur.
    5. Sélectionnez Installer pour installer Expérience utilisateur.
    6. Redémarrez l’ordinateur.
  2. Effectuez l’une des opérations suivantes :

    • Pour Windows Server 2012, 2012 R2 et 2016, sélectionnez Centre de synchronisation dans le Panneau de commande, puis sélectionnez Gérer les fichiers hors connexion.
    • Pour Windows Server 2008 et 2008 R2, sélectionnez Fichiers hors connexion dans le Panneau de contrôle.
  3. Sélectionnez Activer les fichiers hors connexion. Ne redémarrez pas l’ordinateur pour le moment.

  4. Assurez-vous que le cache est en lecture seule. Pour ce faire, exécutez la commande suivante à une invite de commandes avec élévation de élévation de niveaux :

    REG ADD "HKLM\System\CurrentControlSet\Services\CSC\Parameters" /v ReadOnlyCache /t REG_DWORD /d 1 /f
    
  5. Redémarrez l’ordinateur.

  6. Accédez au serveur de fichiers à partir de l’ordinateur. Cliquez avec le bouton droit sur le partage qui contient la configuration partagée IIS, puis sélectionnez Toujours disponible hors connexion.

    Notes

    Si vous définissez le partage de fichiers de manière à ce qu’il soit hautement disponible sur le même cluster de failover qui héberge les nœuds IIS, l’option Toujours disponible hors connexion n’apparaît pas lorsque vous cliquez avec le bouton droit sur le partage si le nœud de cluster sur qui vous vous trouve héberge le serveur de fichiers hautement disponible. Vous devrez déplacer l’application de serveur de fichiers à haut niveau de disponible vers un autre nœud.

  7. Dans le Panneau de contrôle, ouvrez les fichiers hors connexion. Sélectionnez Ouvrir le Centre de synchronisation, puis Sélectionnez Planifier.

  8. Planifier une synchronisation de fichiers hors connexion pour chaque jour ou en fonction de vos besoins. Vous pouvez également configurer la synchronisation hors connexion pour qu’elle s’exécute toutes les quelques minutes. Même si vous ne définissez pas de programmeur, lorsque vous modifiez une valeur dans le fichier Applicationhost.config, la modification est reflétée sur le serveur Web.

Notes

Pour plus d’informations sur la configuration des fichiers hors connexion pour une configuration partagée dans IIS, voir Fichiers hors connexion pour la configuration partagée.

Configurer le site web et spécifier l’emplacement de son contenu sur un nœud de cluster

Recherchez le nœud de cluster qui possède la ressource de disque de cluster dans laquelle les fichiers de contenu du site web resteront :

  1. Accédez aux outils d’administration, puis sélectionnez Gestionnaire du cluster deover.
  2. Connectez-vous au cluster. Si vous êtes sur l’un des nodes de cluster, le cluster apparaîtra automatiquement dans la liste.
  3. Sous Stockage, recherchez la ressource de disque sur laquelle résidera le contenu de la page Web. Pour ce faire, développez l’arborescence de stockage pour la ressource de disque. Assurez-vous que le stockage n’est utilisé par aucune autre application de haute disponibilité sur le cluster. Vous trouverez le stockage sous Stockage disponible.
  4. Nœud de cluster sur lequel cette ressource est en ligne. Vous allez configurer IIS sur ce nœud de cluster.
  5. Nom de la ressource de disque de cluster.

Vous l’utiliserez pour les fichiers de contenu. Sur le nœud de cluster sur lequel la ressource est en ligne, configurez le serveur Web pour qu’il utilise le disque partagé pour le contenu du site web :

  1. Accédez à Outils d’administration, puis sélectionnez Gestionnaire des services Internet (IIS).
  2. Dans le volet gauche, développez le nœud nom du serveur.
  3. Développez Sites, puis sous Sites, sélectionnez le site que vous configurez.
  4. Dans le volet droit, sélectionnez Paramètres avancés sous Gérer le site Web.
  5. Recherchez la propriété Chemin d’accès physique sous Paramètres généraux, puis tapez l’emplacement où se trouvent les fichiers de contenu du site web. Il s’agit de l’emplacement de la ressource de disque de cluster que vous avez noté à l’étape 5 de la procédure précédente.
  6. Sélectionnez OK.

Configurer la haute disponibilité de votre site web en créant un script générique dans le Gestionnaire du cluster deover

Pour la dernière étape de configuration de la haute disponibilité pour les serveurs Web IIS, configurez la ressource de script générique qui sera utilisée pour surveiller le site web et le pool d’applications pour le site web :

  1. Sur chaque nœud de cluster, copiez le script fourni à la fin de cet Windows\System32\inetsrv\Clusweb7.vbs article.

  2. Par défaut, le script surveille un site web nommé Site Web par défaut et un pool d’applications nommé DefaultAppPool. Si ce n’est pas le site web et le pool d’applications corrects, modifiez les SITE_NAME and APP_POOL_NAME variables. Assurez-vous que le même site web et le même pool d’applications dans le script existent sur tous les nodes de cluster.

    Notes

    Les noms sont sensibles à la cas.

  3. Accédez aux outils d’administration, puis sélectionnez Gestionnaire du cluster deover.

  4. Connectez-vous au cluster. Si vous êtes sur l’un des nodes de cluster, le cluster apparaîtra automatiquement dans la liste.

  5. Effectuez l’une des opérations suivantes :

    • Pour Windows Server 2012, 2012 R2 et 2016, cliquez avec le bouton droit sur Rôles, puis sélectionnez Configurer le rôle pour le créer.
    • Pour Windows Server 2008 et 2008 R2, cliquez avec le bouton droit sur le cluster, puis sélectionnez Configurer un service ou une application. Un Assistant crée la charge de travail de haute disponibilité.
  6. Sélectionnez un script générique.

  7. Sélectionnez le fichier de script à partir %systemroot%\System32\Inetsrv\clusweb7.vbs de .

  8. Définissez le nom du point d’accès au client (CAP) sur le nom du site web que les clients utiliseront pour se connecter au site web de haute disponibilité. Spécifiez les adresses IP statiques à utiliser pour le cap du site web. Si vous utilisez le protocole DHCP (Dynamic Host Configuration Protocol), cette option ne s’affiche pas.

  9. Dans l’étape Sélectionner le stockage, sélectionnez le disque partagé de cluster sur lequel se contiennent les fichiers de contenu du site web. Le stockage doit être inutilisé par toute autre application de haute disponibilité sur le cluster.

    Notes

    Si le partage de fichiers utilisé pour la configuration partagée IIS est hébergé sur le même cluster, une ressource de disque différente doit être utilisée ici.

  10. Après avoir confirmé les paramètres, l’Assistant crée le groupe de clusters, les ressources de cluster et les dépendances entre les ressources, puis met les ressources en ligne.

    Notes

    Pour héberger plusieurs sites web haute disponibilité sur le même cluster deover, suivez les mêmes étapes que ci-dessus. Toutefois, utilisez un fichier de script différent pour chaque site web et un stockage partagé en cluster différent. Par exemple, dans , utilisezclusweb7.vbspour le premier site web,clweb7-2.vbspour le %systemroot%\System32\Inetsrv second, clweb7-3.vbs pour le troisième, etc. Chaque fichier de script surveille un site web et un pool d’applications différents.

Le script suivant est uniquement à des fins d’exemple et n’est pas explicitement pris en charge par Microsoft. L’utilisation de ce script dans un environnement en cluster IIS 7.0 ou version ultérieure est à vos propres risques.

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