Configuración del servicio de publicación world wide web de IIS en un clúster de conmutación por error de Windows Server

En este artículo se describe cómo configurar Microsoft Internet Information Services (IIS) World Wide Web Publishing Service (W3SVC) en un clúster de conmutación por error de Windows Server (WSFC).

Versión original del producto: Windows Server 2008 y versiones posteriores, Internet Information Services 8.0 y versiones posteriores
Número de KB original: 970759

Introducción

Los procedimientos de este artículo solo se aplican al servicio de publicación world wide web. Para obtener instrucciones sobre cómo configurar el servicio de publicación FTP en un clúster de conmutación por error, consulte Configuración de FTP para IIS en un clúster de conmutación por error de Windows Server.

Más información

En versiones anteriores de Internet Information Services, Microsoft proporcionaba componentes genéricos de supervisión de recursos para admitir instancias de servidor web de alta disponibilidad mediante la infraestructura de clústeres de Microsoft. Sin embargo, se necesitaba código personalizado para aprovechar completamente el potencial de dicha solución. Además, los scripts genéricos proporcionados por Microsoft no satisfacen las necesidades del cliente. Para configurar IIS 7.0 o una versión posterior en un entorno en clúster que usa clústeres de conmutación por error de Windows Server, debe usar un código personalizado (scripting) para habilitar este escenario de alta disponibilidad. Al hacerlo, los usuarios pueden personalizar la configuración para satisfacer sus requisitos. que les proporciona control total sobre la integración de alta disponibilidad de las aplicaciones web. Además, las interfaces de script para la administración y supervisión que se introdujeron en IIS 7.0 proporcionan un entorno más completo que los scripts proporcionados anteriormente.

Nota:

Los archivos de instalación de IIS 7.0 incluyen incorrectamente los archivos de script Clusweb.vbs y Clusftp.vbs que se usan en IIS 6.0 para las tareas administrativas del clúster de IIS. No use estos scripts con IIS 7.0 o una versión posterior.

Se recomienda que los administradores evalúen cuidadosamente el uso del equilibrio de carga de red (NLB) como método principal y preferido para mejorar la escalabilidad y disponibilidad de las aplicaciones web con varios servidores que ejecutan IIS 7.0 o una versión posterior, en lugar de usar clústeres de conmutación por error. Una de las ventajas de NLB es que todos los servidores pueden participar activamente en el control simultáneo de las solicitudes entrantes del Protocolo de transferencia de hipertexto (HTTP). Otra ventaja es que, en un entorno de IIS de NLB, puede ser mucho más fácil admitir actualizaciones graduales y reversiones, a la vez que proporciona alta disponibilidad de las aplicaciones web. Para obtener más información sobre el uso de IIS 7.0 o una versión posterior en un entorno NLB, vea los artículos siguientes:

Es importante tener en cuenta que la agrupación en clústeres de IIS mediante la agrupación en clústeres de los servicios iis no siempre garantiza una solución de alta disponibilidad para las aplicaciones web. Aunque los servicios IIS (en concreto el servicio WWW) podrían estar en funcionamiento, el proceso de hospedaje de un grupo de aplicaciones específico podría haber finalizado o la aplicación podría estar generando errores HTTP internos del servidor. La agrupación en clústeres de las aplicaciones web y la supervisión de su estado mediante un script personalizado es la manera correcta y recomendada de lograr un clúster de IIS de alta disponibilidad mediante clústeres de conmutación por error. A continuación se muestra un script de ejemplo que supervisa el estado de un grupo de aplicaciones para determinar si se ha iniciado o no.

Para configurar la alta disponibilidad para IIS 7.0 o un servidor web de versión posterior mediante clústeres de conmutación por error, siga estos pasos. Los pasos 3 a 7 se describen con más detalle a continuación. El script de ejemplo más adelante en este artículo se puede usar como ejemplo para IIS 7.0 o una versión posterior.

  1. Instale el rol servidor web en todos los nodos del clúster. Para obtener más información, consulte la Guía de implementación de IIS 7.
  2. Instale la característica de agrupación en clústeres de conmutación por error en todos los nodos de clúster y cree el clúster. Para obtener más información, consulte la Guía de implementación de clústeres de conmutación por error.
  3. Configure un recurso compartido de archivos que se usará para la configuración compartida de IIS.
  4. Configure la configuración compartida de IIS en todos los nodos del clúster.
  5. Configure archivos sin conexión de IIS para la configuración compartida en todos los nodos del clúster.
  6. Configure el sitio web (incluido el grupo de aplicaciones asociado) y especifique la ubicación de su contenido en un nodo de clúster.
  7. Configure la alta disponibilidad para el sitio web mediante la creación de un script genérico en la agrupación en clústeres de conmutación por error.

Configuración de un recurso compartido de archivos que se usará para la configuración compartida de IIS

  1. Cree un usuario que acceda al recurso compartido que se usará para la configuración compartida de IIS.
  2. Cree el recurso compartido de archivos. Este recurso compartido se usará para almacenar la configuración compartida de IIS que se compartirá entre IIS en todos los nodos del clúster. Hay varias opciones:
  3. Establezca los permisos en el recurso compartido que creó en el paso 2. Conceda al usuario que creó en el paso 1 permisos de control total para el recurso compartido de archivos y los permisos NTFS.
  4. Confirme que todos los nodos del clúster pueden ir al recurso compartido de archivos. La ruta de acceso al recurso compartido de archivos es \\<fileserver>\<share>.

Configuración de la configuración compartida de IIS en todos los nodos del clúster

Nota:

Hay un problema con la configuración compartida de IIS en Windows 2008 Server debido a que faltan privilegios para Application Host Helper Service. Para que la configuración compartida funcione, debe seguir estos pasos al configurar la configuración compartida de IIS en Windows 2008 Server.

  1. Abra un símbolo del sistema administrativo.

  2. Ejecute el siguiente comando:

    net stop apphostsvc
    
  3. Ejecute el siguiente comando:

    sc privs apphostsvc SeChangeNotifyPrivilege/SeTcbPrivilege/SeImpersonatePrivilege
    
  4. Ejecute el siguiente comando:

    net start apphostsvc
    

Después de completar estos pasos en cada servidor de Windows 2008 en el clúster, siga configurando la configuración compartida de IIS como se describe en esta sección.

En uno de los nodos del clúster, exporte la configuración compartida al recurso compartido de archivos:

  1. Vaya a Herramientas administrativas y, a continuación, seleccione Administrador de Internet Information Services (IIS).
  2. En el panel izquierdo, seleccione el nodo nombre del servidor .
  3. Haga doble clic en el icono Configuración compartida .
  4. En la página Configuración compartida , seleccione Exportar configuración en el panel Acciones (panel derecho) para exportar los archivos de configuración del equipo local a otra ubicación.
  5. En el cuadro de diálogo Exportar configuración , escriba la ruta de acceso del recurso compartido de archivos (\\<fileserver>\<share>) en el cuadro Ruta de acceso física .
  6. Seleccione Conectar como y, a continuación, escriba el nombre de usuario y la contraseña de la cuenta de usuario que tiene acceso al recurso compartido en el que se almacena la configuración compartida y, a continuación, seleccione Aceptar. Esta cuenta se usará para acceder al recurso compartido. Debe usar una cuenta de Active Directory restringida que no sea el administrador de dominio.
  7. En el cuadro de diálogo Exportar configuración , escriba una contraseña que se usará para proteger las claves de cifrado y, a continuación, seleccione Aceptar.
  8. En la página Configuración compartida , active la casilla Habilitar configuración compartida .
  9. Escriba la ruta de acceso física, la cuenta de usuario y la contraseña que especificó anteriormente y, a continuación, seleccione Aplicar en el panel Acciones .
  10. En el cuadro de diálogo Contraseña de claves de cifrado, escriba la contraseña de clave de cifrado que estableció anteriormente y, a continuación, seleccione Aceptar.
  11. En el cuadro de diálogo Configuración compartida , seleccione Aceptar.
  12. Seleccione Aceptar.

En cada uno de los otros nodos del clúster, use la configuración compartida que acaba de exportar al recurso compartido de archivos:

  1. Vaya a Herramientas administrativas y, a continuación, seleccione Administrador de Internet Information Services (IIS).
  2. Seleccione el nodo nombre del servidor .
  3. Haga doble clic en el icono Configuración compartida .
  4. En la página Configuración compartida , active la casilla Habilitar configuración compartida .
  5. Escriba la ruta de acceso física del recurso compartido de archivos (\\<fileserver>\<share>), la cuenta de usuario y la contraseña que especificó anteriormente y, a continuación, seleccione Aplicar en el panel Acciones .
  6. En el cuadro de diálogo Contraseña de claves de cifrado, escriba la contraseña de clave de cifrado que estableció anteriormente y, a continuación, seleccione Aceptar.
  7. En el cuadro de diálogo Configuración compartida , seleccione Aceptar.
  8. Seleccione Aceptar.

Nota:

Para obtener más información sobre cómo configurar configuraciones compartidas en IIS, visite Configuración compartida.

Configuración de archivos sin conexión de IIS para la configuración compartida en todos los nodos del clúster

En cada nodo de clúster, habilite Archivos sin conexión:

  1. Instalación de la experiencia de escritorio

    1. Vaya a Herramientas administrativas y, a continuación, seleccione Administrador del servidor.
    2. En el panel izquierdo, seleccione Características.
    3. Seleccione Agregar características en el panel derecho.
    4. Realice una de las siguientes acciones, según corresponda para la versión de Windows:
      • Para obtener Windows Server 2016, visite Instalar servidor con experiencia de escritorio.
      • Para Windows Server 2102 y 2012 R2, elija Experiencia de escritorio en Interfaces de usuario e infraestructuras en la lista de características.
      • En Windows Server 2008 y 2008 R2, elija Experiencia de escritorio.
    5. Seleccione Instalar para instalar Experiencia de escritorio.
    6. Reinicie el equipo.
  2. Realiza una de las siguientes acciones:

    • Para Windows Server 2012, 2012 R2 y 2016, seleccione Centro de sincronización en Panel de control y, a continuación, seleccione Administrar archivos sin conexión.
    • En Windows Server 2008 y 2008 R2, seleccione Archivos sin conexión en Panel de control.
  3. Seleccione Habilitar archivos sin conexión. No reinicie el equipo en este momento.

  4. Asegúrese de que la memoria caché está establecida en solo lectura. Para ello, ejecute el siguiente comando en un símbolo del sistema con privilegios elevados:

    REG ADD "HKLM\System\CurrentControlSet\Services\CSC\Parameters" /v ReadOnlyCache /t REG_DWORD /d 1 /f
    
  5. Reinicie el equipo.

  6. Vaya al servidor de archivos desde el equipo. Haga clic con el botón derecho en el recurso compartido que contiene la configuración compartida de IIS y, a continuación, seleccione Always Available Offline (Siempre disponible sin conexión).

    Nota:

    Si configura el recurso compartido de archivos para que tenga alta disponibilidad en el mismo clúster de conmutación por error que hospeda nodos iis, la opción Always Available Offline no aparecerá al hacer clic con el botón derecho en el recurso compartido si el nodo de clúster en el que se encuentra hospeda el servidor de archivos de alta disponibilidad. Tendrá que mover la aplicación de servidor de archivos de alta disponibilidad a otro nodo.

  7. En Panel de control, abra Archivos sin conexión. Seleccione Abrir centro de sincronización y, a continuación, seleccione Programar.

  8. Programe una sincronización de archivos sin conexión para cada día o según sus requisitos. También puede configurar la sincronización sin conexión para que se ejecute cada pocos minutos. Incluso si no configura un programador, al cambiar algo en el archivo Applicationhost.config , el cambio se refleja en el servidor web.

Nota:

Para obtener más información sobre cómo configurar archivos sin conexión para una configuración compartida en IIS, vea Archivos sin conexión para la configuración compartida.

Configurar el sitio web y especificar la ubicación de su contenido en un nodo de clúster

Busque el nodo de clúster que posee el recurso de disco del clúster donde permanecerán los archivos de contenido del sitio web:

  1. Vaya a Herramientas administrativas y seleccione Administrador de clústeres de conmutación por error.
  2. Conéctese al clúster. Si se encuentra en uno de los nodos del clúster, el clúster aparecerá automáticamente en la lista.
  3. En Almacenamiento, busque el recurso de disco en el que residirá el contenido de la página web. Para ello, expanda el árbol de almacenamiento del recurso de disco. Asegúrese de que ninguna otra aplicación de alta disponibilidad del clúster use el almacenamiento. Encontrará el almacenamiento en Almacenamiento disponible.
  4. Nodo de clúster en el que está en línea este recurso. Configurará IIS en ese nodo de clúster.
  5. Nombre del recurso de disco del clúster.

Usará esto para los archivos de contenido. En el nodo de clúster en el que el recurso está en línea, configure el servidor web para que use el disco compartido para el contenido del sitio web:

  1. Vaya a Herramientas administrativas y, a continuación, seleccione Administrador de Internet Information Services (IIS).
  2. En el panel izquierdo, expanda el nodo nombre del servidor.
  3. Expanda Sitios y, a continuación, en Sitios, seleccione el sitio que va a configurar.
  4. En el panel derecho, seleccione Configuración avanzada en Administrar sitio web.
  5. Busque la propiedad Ruta de acceso física en Configuración general y escriba la ubicación donde se encuentran los archivos de contenido del sitio web. Es la ubicación del recurso de disco del clúster que anotó en el paso 5 del procedimiento anterior.
  6. Seleccione Aceptar.

Configuración de la alta disponibilidad para el sitio web mediante la creación de un script genérico en el Administrador de clústeres de conmutación por error

Para que el último paso configure la alta disponibilidad para los servidores web iis, configure el recurso de script genérico que se usará para supervisar el sitio web y el grupo de aplicaciones para el sitio web:

  1. En cada nodo de clúster, copie el script que se proporciona al final de este artículo en Windows\System32\inetsrv\Clusweb7.vbs.

  2. De forma predeterminada, el script supervisa un sitio web denominado Sitio web predeterminado y un grupo de aplicaciones denominado DefaultAppPool. Si no son el sitio web y el grupo de aplicaciones correctos, cambie las SITE_NAME and APP_POOL_NAME variables. Asegúrese de que el mismo sitio web y grupo de aplicaciones del script existen en todos los nodos del clúster.

    Nota:

    Los nombres distinguen mayúsculas de minúsculas.

  3. Vaya a Herramientas administrativas y seleccione Administrador de clústeres de conmutación por error.

  4. Conéctese al clúster. Si se encuentra en uno de los nodos del clúster, el clúster aparecerá automáticamente en la lista.

  5. Realiza una de las siguientes acciones:

    • Para Windows Server 2012, 2012 R2 y 2016, haga clic con el botón derecho en Roles y, a continuación, seleccione Configurar rol para crearlo.
    • En Windows Server 2008 y 2008 R2, haga clic con el botón derecho en el clúster y seleccione Configurar un servicio o aplicación. Un asistente crea la carga de trabajo de alta disponibilidad.
  6. Seleccione Script genérico.

  7. Seleccione el archivo de script de %systemroot%\System32\Inetsrv\clusweb7.vbs.

  8. Establezca el nombre del punto de acceso de cliente (CAP) en el nombre del sitio web que los clientes usarán para conectarse al sitio web de alta disponibilidad. Especifique las direcciones IP estáticas que se usarán para el CAP del sitio web. Si usa el Protocolo de configuración dinámica de host (DHCP), no se mostrará esta opción.

  9. En el paso Seleccionar almacenamiento , seleccione el disco compartido del clúster en el que se encuentran los archivos de contenido del sitio web. Cualquier otra aplicación de alta disponibilidad del clúster debe no usar el almacenamiento.

    Nota:

    Si el recurso compartido de archivos que se usa para la configuración compartida de IIS se hospeda en el mismo clúster, se debe usar un recurso de disco diferente aquí.

  10. Después de confirmar la configuración, el asistente creará el grupo de clústeres, los recursos del clúster y las dependencias entre los recursos y, a continuación, pondrá los recursos en línea.

    Nota:

    Para hospedar varios sitios web de alta disponibilidad en el mismo clúster de conmutación por error, siga los mismos pasos que antes. Sin embargo, use un archivo de script diferente para cada sitio web y un almacenamiento compartido en clúster diferente. Por ejemplo, en %systemroot%\System32\Inetsrv, use clusweb7.vbs para el primer sitio web, clweb7-2.vbs para el segundo, clweb7-3.vbs para el tercero, etc. Cada archivo de script supervisa un sitio web y un grupo de aplicaciones diferentes.

El siguiente script solo tiene fines de ejemplo y Microsoft no admite explícitamente. El uso de este script en un entorno clúster de IIS 7.0 o una versión posterior corre su propio riesgo.

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