Configuration du service de publication IIS World Wide Web dans un cluster de basculement Windows Server

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

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

Introduction

Les procédures décrites dans 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 basculement, consultez Configuration de FTP pour IIS dans un cluster de basculement Windows Server.

Plus d’informations

Dans les versions antérieures d’Internet Information Services, Microsoft fournissait des composants génériques de surveillance des ressources pour prendre en charge des instances de serveur Web à haute disponibilité à l’aide de l’infrastructure de clustering Microsoft. Toutefois, un code personnalisé était nécessaire pour réaliser pleinement le potentiel d’une telle solution. En outre, les scripts génériques fournis par Microsoft ne répondaient pas aux besoins des clients. Pour configurer IIS 7.0 ou une version ultérieure dans un environnement en cluster qui utilise des clustering de basculement Windows Server, vous devez utiliser un code personnalisé (script) pour activer ce scénario de haute disponibilité. Lorsque vous le faites, les utilisateurs peuvent personnaliser la configuration pour répondre à leurs besoins. ce qui leur donne un contrôle total sur l’intégration à 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.

Remarque

Les fichiers d’installation IIS 7.0 incluent de manière incorrecte les fichiers de scriptClusweb.vbs et Clusftp.vbs utilisés dans IIS 6.0 pour les tâches d’administration du cluster IIS. N’utilisez pas ces scripts avec IIS 7.0 ou une version ultérieure.

Nous recommandons aux administrateurs d’évaluer soigneusement l’utilisation de l’équilibrage de charge réseau (NLB) comme méthode principale et préférée pour améliorer la scalabilité et la disponibilité des applications Web avec plusieurs serveurs exécutant IIS 7.0 ou une version ultérieure, par opposition à l’utilisation de clustering de basculement. L’un des avantages de l’équilibrage de charge réseau est que tous les serveurs peuvent participer activement à la gestion simultanée des requêtes HTTP (HyperText Transfer Protocol) entrantes. Un autre avantage est que dans un environnement IIS NLB, il peut être beaucoup plus facile de prendre en charge les mises à jour propagées et les restaurations 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 NLB, consultez les articles suivants :

Il est important de tenir compte du fait que clustering IIS au moyen de clustering les services IIS ne garantit pas toujours une solution haute disponibilité pour les applications web. Bien que les services IIS (en particulier le service WWW) puissent être opérationnels, le processus d’hébergement d’un pool d’applications spécifique peut s’être arrêté ou l’application peut générer des erreurs HTTP internes du serveur. Le clustering des applications web et la surveillance de leur intégrité à l’aide d’un script personnalisé sont la méthode correcte et recommandée pour obtenir un cluster IIS à haute disponibilité à l’aide de clustering de basculement. Voici 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 un serveur web IIS 7.0 ou version ultérieure à l’aide de clustering de basculement, procédez comme suit. 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 nœuds de cluster. Pour plus d’informations, consultez guide de déploiement IIS 7.
  2. Installez la fonctionnalité de basculement clustering sur tous les nœuds de cluster et créez le cluster. Pour plus d’informations, consultez Guide de déploiement du cluster de basculement.
  3. Configurez un partage de fichiers qui sera utilisé pour la configuration partagée IIS.
  4. Configurez la configuration partagée IIS sur tous les nœuds de cluster.
  5. Configurez les fichiers iis hors connexion pour la configuration partagée sur tous les nœuds 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é pour votre site web en créant un script générique dans les clustering de basculement.

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 nœuds de cluster. Il existe plusieurs options :
  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 les autorisations Contrôle total sur le partage de fichiers et les autorisations NTFS.
  4. Vérifiez que tous les nœuds de cluster peuvent accéder 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 nœuds de cluster

Remarque

Il existe un problème avec la configuration partagée IIS sur Windows 2008 Server en raison de privilèges manquants pour le Application Host Helper Service. Pour que la configuration partagée fonctionne, vous devez suivre ces étapes lorsque vous configurez 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
    

Après avoir effectué ces étapes sur chaque serveur Windows 2008 du cluster, continuez à configurer la configuration partagée IIS comme décrit dans cette section.

Sur l’un des nœuds de cluster, exportez 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 du partage de fichiers (\\<fileserver>\<share>) dans la zone Chemin d’accès physique .
  6. Sélectionnez Se connecter en tant que, 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, cochez la case Activer la configuration partagée case activé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éfini 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 nœuds de cluster, utilisez la configuration partagée que vous venez d’exporter 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, cochez la case Activer la configuration partagée case activée.
  5. Tapez le chemin physique du partage de fichiers (\\<fileserver>\<share>), le compte d’utilisateur et le mot de passe que vous avez entré précédemment, puis sélectionnez Appliquer dans le 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éfini précédemment, puis sélectionnez OK.
  7. Dans la boîte de dialogue Configuration partagée , sélectionnez OK.
  8. Sélectionnez OK.

Remarque

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

Configurer des fichiers IIS hors connexion pour la configuration partagée sur tous les nœuds de cluster

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

  1. Installer l’expérience utilisateur

    1. Accédez à 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. Effectuez l’une des opérations suivantes, en fonction de votre version de Windows :
      • Pour Windows Server 2016, consultez Installer le serveur 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 Panneau de configuration, puis gérer les fichiers hors connexion.
    • Pour Windows Server 2008 et 2008 R2, sélectionnez Fichiers hors connexion dans Panneau de configuration.
  3. Sélectionnez Activer les fichiers hors connexion. Ne redémarrez pas l’ordinateur pour l’instant.

  4. Vérifiez que le cache est défini sur lecture seule. Pour ce faire, exécutez la commande suivante à une invite de commandes avec élévation de privilèges :

    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.

    Remarque

    Si vous configurez le partage de fichiers pour qu’il soit hautement disponible sur le même cluster de basculement 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 lequel vous vous trouvez héberge le serveur de fichiers à haute disponibilité. Vous devez déplacer l’application de serveur de fichiers à haute disponibilité vers un autre nœud.

  7. Dans Panneau de configuration, ouvrez Fichiers hors connexion. Sélectionnez Ouvrir le Centre de synchronisation, puis Planifier.

  8. Planifiez 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 configurez pas de planificateur, lorsque vous modifiez quelque chose dans le fichier Applicationhost.config , la modification est reflétée sur le serveur Web.

Remarque

Pour plus d’informations sur la configuration des fichiers hors connexion pour une configuration partagée dans IIS, consultez 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 où les fichiers de contenu du site web resteront :

  1. Accédez à Outils d’administration, puis sélectionnez Gestionnaire du cluster de basculement.
  2. Connectez-vous au cluster. Si vous êtes sur l’un des nœuds du cluster, le cluster apparaît automatiquement dans la liste.
  3. Sous Stockage, recherchez la ressource de disque sur laquelle se trouve le contenu de la page Web. Pour ce faire, développez l’arborescence de stockage de la ressource de disque. Assurez-vous que le stockage n’est pas utilisé par une autre application à 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 utiliser 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 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ée à l’étape 5 de la procédure précédente.
  6. Sélectionnez OK.

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

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 article dans Windows\System32\inetsrv\Clusweb7.vbs.

  2. Par défaut, le script surveille un site web nommé Site web par défaut et un pool d’applications nommé DefaultAppPool. S’il ne s’agit pas du site web et du pool d’applications appropriés, 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 nœuds de cluster.

    Remarque

    Les noms respectent la casse.

  3. Accédez à Outils d’administration, puis sélectionnez Gestionnaire du cluster de basculement.

  4. Connectez-vous au cluster. Si vous êtes sur l’un des nœuds du cluster, le cluster apparaît 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 haute disponibilité.
  6. Sélectionnez Script générique.

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

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

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

    Remarque

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

  10. Une fois que vous avez 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.

    Remarque

    Pour héberger plusieurs sites web à haute disponibilité sur le même cluster de basculement, 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 %systemroot%\System32\Inetsrv, utilisez clusweb7.vbs pour le premier site web, clweb7-2.vbs pour le deuxième, 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 destiné à des exemples uniquement 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 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>