Udostępnij za pośrednictwem


Konfigurowanie usługi publikowania w sieci Web usług IIS w klastrze trybu failover systemu Windows Server

W tym artykule opisano sposób konfigurowania usługi Microsoft Internet Information Services (IIS) World Wide Web Publishing Service (W3SVC) w klastrze trybu failover systemu Windows Server (WSFC).

Oryginalna wersja produktu: Windows Server 2008 i nowsze wersje, Internet Information Services 8.0 i nowsze wersje
Oryginalny numer KB: 970759

Wprowadzenie

Procedury opisane w tym artykule dotyczą tylko usługi publikowania w sieci World Wide Web. Aby uzyskać instrukcje dotyczące konfigurowania usługi publikowania FTP w klastrze trybu failover, zobacz Jak skonfigurować protokół FTP dla usług IIS w klastrze trybu failover systemu Windows Server.

Więcej informacji

We wcześniejszych wersjach internetowych usług informacyjnych firma Microsoft udostępniła ogólne składniki monitora zasobów do obsługi wystąpień serwera sieci Web o wysokiej dostępności przy użyciu infrastruktury klastrowania firmy Microsoft. Jednak kod niestandardowy był potrzebny do pełnego wykorzystania potencjału takiego rozwiązania. Ponadto ogólne skrypty dostarczone przez firmę Microsoft nie spełniają wymagań klientów. Aby skonfigurować usługi IIS 7.0 lub nowszą wersję w środowisku klastra używającym klastra trybu failover systemu Windows Server, należy użyć niestandardowego kodu (skryptów) w celu włączenia takiego scenariusza wysokiej dostępności. Gdy to zrobisz, użytkownicy mogą dostosować konfigurację, aby spełnić ich wymagania. zapewnia im pełną kontrolę nad integracją aplikacji internetowych o wysokiej dostępności. Ponadto interfejsy skryptów do administrowania i monitorowania wprowadzone w usługach IIS 7.0 zapewniają bogatsze środowisko niż podane wcześniej skrypty.

Uwaga 16.

Pliki instalacyjne usług IIS 7.0 niepoprawnie zawierają pliki skryptów Clusweb.vbs i Clusftp.vbs używane w usługach IIS 6.0 na potrzeby zadań administracyjnych klastra usług IIS. Nie należy używać tych skryptów z usługami IIS 7.0 lub nowszymi wersjami.

Zalecamy, aby administratorzy starannie ocenili użycie równoważenia obciążenia sieciowego (NLB) jako podstawowej i preferowanej metody w celu poprawy skalowalności i dostępności aplikacji sieci Web z wieloma serwerami z uruchomionymi usługami IIS 7.0 lub nowszą wersją, w przeciwieństwie do używania klastra trybu failover. Jedną z zalet równoważenia obciążenia sieciowego jest to, że wszystkie serwery mogą aktywnie uczestniczyć w jednoczesnej obsłudze przychodzących żądań protokołu HYPERText Transfer Protocol (HTTP). Kolejną korzyścią jest to, że w środowisku usług IIS równoważenia obciążenia sieciowego można znacznie łatwiej obsługiwać aktualizacje stopniowe i wycofywanie, jednocześnie zapewniając wysoką dostępność aplikacji internetowych. Aby uzyskać więcej informacji na temat korzystania z usług IIS 7.0 lub nowszej wersji w środowisku równoważenia obciążenia sieciowego, zobacz następujące artykuły:

Należy wziąć pod uwagę, że klastrowanie usług IIS za pomocą klastrowania usług IIS nie zawsze gwarantuje wysoką dostępność dla aplikacji internetowych. Chociaż usługi IIS (w szczególności usługa WWW) mogą być uruchomione, proces hostingu określonej puli aplikacji może zostać zakończony lub aplikacja może zgłaszać wewnętrzne błędy HTTP serwera. Klastrowanie aplikacji internetowych i monitorowanie ich kondycji przy użyciu skryptu niestandardowego jest poprawnym i zalecanym sposobem osiągnięcia klastra usług IIS o wysokiej dostępności przy użyciu klastra trybu failover. Poniżej znajduje się przykładowy skrypt, który monitoruje stan puli aplikacji w celu określenia, czy jest uruchomiony, czy nie.

Aby skonfigurować wysoką dostępność dla usług IIS 7.0 lub nowszej wersji serwera sieci Web przy użyciu klastra trybu failover, wykonaj następujące kroki. Kroki od 3 do 7 zostały opisane bardziej szczegółowo poniżej. Przykładowy skrypt w dalszej części tego artykułu może służyć jako przykład dla usług IIS 7.0 lub nowszej wersji.

  1. Zainstaluj rolę serwera sieci Web we wszystkich węzłach klastra. Aby uzyskać szczegółowe informacje, zobacz Przewodnik wdrażania usług IIS 7.
  2. Zainstaluj funkcję klastra trybu failover na wszystkich węzłach klastra i utwórz klaster. Aby uzyskać szczegółowe informacje, zobacz Przewodnik wdrażania klastra trybu failover.
  3. Skonfiguruj udział plików, który będzie używany na potrzeby konfiguracji udostępnionej usług IIS.
  4. Skonfiguruj konfigurację udostępnioną usług IIS we wszystkich węzłach klastra.
  5. Skonfiguruj pliki w trybie offline usług IIS na potrzeby konfiguracji udostępnionej we wszystkich węzłach klastra.
  6. Skonfiguruj witrynę internetową (w tym skojarzona pula aplikacji) i określ lokalizację jej zawartości w jednym węźle klastra.
  7. Skonfiguruj wysoką dostępność witryny internetowej, tworząc ogólny skrypt w klastrze trybu failover.

Konfigurowanie udziału plików, który będzie używany na potrzeby konfiguracji udostępnionej usług IIS

  1. Utwórz użytkownika, który będzie uzyskiwać dostęp do udziału, który będzie używany do konfiguracji udostępnionej usług IIS.
  2. Utwórz udział plików. Ten udział będzie używany do przechowywania konfiguracji udostępnionej usług IIS, która będzie współdzielona między usługami IIS we wszystkich węzłach klastra. Istnieje wiele opcji:
  3. Ustaw uprawnienia do udziału utworzonego w kroku 2. Nadaj użytkownikowi utworzonemu w kroku 1 uprawnienia Pełna kontrola do udziału plików i uprawnień systemu plików NTFS.
  4. Upewnij się, że wszystkie węzły klastra mogą przejść do udziału plików. Ścieżka do udziału plików to \\<fileserver>\<share>.

Konfigurowanie konfiguracji udostępnionej usług IIS we wszystkich węzłach klastra

Uwaga 16.

Wystąpił problem z konfiguracją udostępnioną usług IIS w systemie Windows 2008 Server z powodu braku uprawnień dla programu Application Host Helper Service. Aby konfiguracja udostępniona działała, należy wykonać następujące kroki podczas konfigurowania konfiguracji udostępnionej usług IIS w systemie Windows 2008 Server.

  1. Otwórz administracyjny wiersz polecenia.

  2. Uruchom następujące polecenie:

    net stop apphostsvc
    
  3. Uruchom następujące polecenie:

    sc privs apphostsvc SeChangeNotifyPrivilege/SeTcbPrivilege/SeImpersonatePrivilege
    
  4. Uruchom następujące polecenie:

    net start apphostsvc
    

Po wykonaniu tych kroków w każdym systemie Windows 2008 Server w klastrze kontynuuj konfigurowanie konfiguracji udostępnionej usług IIS zgodnie z opisem w tej sekcji.

W jednym z węzłów klastra wyeksportuj konfigurację udostępnioną do udziału plików:

  1. Przejdź do pozycji Narzędzia administracyjne, a następnie wybierz pozycję Menedżer usług Internet Information Services (IIS).
  2. W okienku po lewej stronie wybierz węzeł nazwy serwera.
  3. Kliknij dwukrotnie ikonę Konfiguracja udostępniona.
  4. Na stronie Konfiguracja udostępniona wybierz pozycję Eksportuj konfigurację w okienku Akcje (okienko po prawej stronie), aby wyeksportować pliki konfiguracji z komputera lokalnego do innej lokalizacji.
  5. W oknie dialogowym Eksportowanie konfiguracji wpisz ścieżkę udziału plików (\\<fileserver>\<share>) w polu Ścieżka fizyczna.
  6. Wybierz pozycję Połącz jako, a następnie wpisz nazwę użytkownika i hasło dla konta użytkownika, które ma dostęp do udziału, w którym jest przechowywana konfiguracja udostępniona, a następnie wybierz przycisk OK. To konto będzie używane do uzyskiwania dostępu do udziału. Należy użyć ograniczonego konta usługi Active Directory, które nie jest administratorem domeny.
  7. W oknie dialogowym Eksportowanie konfiguracji wpisz hasło, które będzie używane do ochrony kluczy szyfrowania, a następnie wybierz przycisk OK.
  8. Na stronie Konfiguracja udostępniona zaznacz pole wyboru Włącz konfigurację udostępnioną.
  9. Wpisz ścieżkę fizyczną, konto użytkownika i wprowadzone wcześniej hasło, a następnie wybierz pozycję Zastosuj w okienku Akcje .
  10. W oknie dialogowym Hasło kluczy szyfrowania wpisz ustawione wcześniej hasło klucza szyfrowania, a następnie wybierz przycisk OK.
  11. W oknie dialogowym Konfiguracja udostępniona wybierz przycisk OK.
  12. Wybierz przycisk OK.

W każdym z pozostałych węzłów klastra użyj konfiguracji udostępnionej, którą właśnie wyeksportowano do udziału plików:

  1. Przejdź do pozycji Narzędzia administracyjne, a następnie wybierz pozycję Menedżer usług Internet Information Services (IIS).
  2. Wybierz węzeł nazwy serwera.
  3. Kliknij dwukrotnie ikonę Konfiguracja udostępniona.
  4. Na stronie Konfiguracja udostępniona zaznacz pole wyboru Włącz konfigurację udostępnioną.
  5. Wpisz ścieżkę fizyczną udziału plików (\\<fileserver>\<share>), konto użytkownika i hasło wprowadzone wcześniej, a następnie wybierz pozycję Zastosuj w okienku Akcje .
  6. W oknie dialogowym Hasło kluczy szyfrowania wpisz ustawione wcześniej hasło klucza szyfrowania, a następnie wybierz przycisk OK.
  7. W oknie dialogowym Konfiguracja udostępniona wybierz przycisk OK.
  8. Wybierz przycisk OK.

Uwaga 16.

Aby uzyskać więcej informacji na temat konfigurowania konfiguracji udostępnionych w usługach IIS, odwiedź stronę Konfiguracja udostępniona.

Konfigurowanie plików trybu offline usług IIS na potrzeby konfiguracji udostępnionej we wszystkich węzłach klastra

W każdym węźle klastra włącz pliki trybu offline:

  1. Instalowanie środowiska pulpitu

    1. Przejdź do pozycji Narzędzia administracyjne, a następnie wybierz pozycję Menedżer serwera.
    2. W okienku po lewej stronie wybierz pozycję Funkcje.
    3. Wybierz pozycję Dodaj funkcje w okienku po prawej stronie.
    4. Wykonaj jedną z następujących czynności, odpowiednio dla używanej wersji systemu Windows:
      • W przypadku systemu Windows Server 2016 odwiedź stronę Instalowanie serwera ze środowiskiem pulpitu.
      • W przypadku systemów Windows Server 2012 i 2012 R2 wybierz pozycję Środowisko pulpitu w obszarze Interfejsy użytkownika i infrastruktury na liście funkcji.
      • W przypadku systemów Windows Server 2008 i 2008 R2 wybierz pozycję Środowisko pulpitu.
    5. Wybierz pozycję Zainstaluj , aby zainstalować środowisko pulpitu.
    6. Uruchom ponownie komputer.
  2. Wykonaj jedną z następujących czynności:

    • W przypadku systemów Windows Server 2012, 2012 R2 i 2016 wybierz pozycję Centrum synchronizacji w Panel sterowania, a następnie wybierz pozycję Zarządzaj plikami trybu offline.
    • W przypadku systemów Windows Server 2008 i 2008 R2 wybierz pozycję Pliki trybu offline w Panel sterowania.
  3. Wybierz pozycję Włącz pliki w trybie offline. Nie uruchamiaj ponownie komputera w tej chwili.

  4. Upewnij się, że pamięć podręczna jest ustawiona na tylko do odczytu. Aby to zrobić, uruchom następujące polecenie w wierszu polecenia z podwyższonym poziomem uprawnień:

    REG ADD "HKLM\System\CurrentControlSet\Services\CSC\Parameters" /v ReadOnlyCache /t REG_DWORD /d 1 /f
    
  5. Uruchom ponownie komputer.

  6. Przejdź do serwera plików z komputera. Kliknij prawym przyciskiem myszy udział zawierający konfigurację udostępnioną usług IIS, a następnie wybierz pozycję Zawsze dostępne w trybie offline.

    Uwaga 16.

    Jeśli udział plików zostanie skonfigurowany jako wysoce dostępny w tym samym klastrze trybu failover hostujący węzły usług IIS, opcja Zawsze dostępna w trybie offline nie będzie wyświetlana po kliknięciu prawym przyciskiem myszy udziału, jeśli węzeł klastra, na którym znajduje się serwer plików o wysokiej dostępności. Należy przenieść aplikację serwera plików o wysokiej dostępności do innego węzła.

  7. W Panel sterowania otwórz plik offline. Wybierz pozycję Otwórz Centrum synchronizacji, a następnie wybierz pozycję Harmonogram.

  8. Zaplanuj synchronizację plików w trybie offline dla każdego dnia lub zgodnie z wymaganiami. Można również skonfigurować synchronizację offline do uruchamiania co kilka minut. Nawet jeśli nie skonfigurowano harmonogramu, gdy zmienisz coś w pliku Applicationhost.config , zmiana zostanie odzwierciedlona na serwerze sieci Web.

Uwaga 16.

Aby uzyskać więcej informacji na temat konfigurowania plików trybu offline dla konfiguracji udostępnionej w usługach IIS, zobacz Pliki trybu offline dla konfiguracji udostępnionej.

Skonfiguruj witrynę internetową i określ lokalizację zawartości w jednym węźle klastra

Znajdź węzeł klastra, który jest właścicielem zasobu dysku klastra, w którym pliki zawartości witryny internetowej pozostaną:

  1. Przejdź do pozycji Narzędzia administracyjne, a następnie wybierz pozycję Menedżer klastra trybu failover.
  2. Połącz się z klastrem. Jeśli znajdujesz się w jednym z węzłów klastra, klaster zostanie automatycznie wyświetlony na liście.
  3. W obszarze Magazyn znajdź zasób dysku, na którym będzie znajdować się zawartość strony sieci Web. Aby to zrobić, rozwiń drzewo magazynu dla zasobu dysku. Upewnij się, że magazyn nie jest używany przez żadną inną aplikację o wysokiej dostępności w klastrze. Magazyn znajduje się w obszarze Dostępny magazyn.
  4. Węzeł klastra, w którym ten zasób jest w trybie online. Skonfigurujesz usługi IIS w tym węźle klastra.
  5. Nazwa zasobu dysku klastra.

Użyjesz go dla plików zawartości. W węźle klastra, w którym zasób jest w trybie online, skonfiguruj serwer sieci Web tak, aby używał dysku udostępnionego dla zawartości witryny sieci Web:

  1. Przejdź do pozycji Narzędzia administracyjne, a następnie wybierz pozycję Menedżer usług Internet Information Services (IIS).
  2. W okienku po lewej stronie rozwiń węzeł nazwy serwera.
  3. Rozwiń węzeł Witryny, a następnie w obszarze Witryny wybierz konfigurowaną witrynę.
  4. W okienku po prawej stronie wybierz pozycję Ustawienia zaawansowane w obszarze Zarządzanie witryną sieci Web.
  5. Znajdź właściwość Ścieżka fizyczna w obszarze Ustawienia ogólne, a następnie wpisz lokalizację, w której znajdują się pliki zawartości witryny internetowej. Jest to lokalizacja zasobu dysku klastra zanotowana w kroku 5 poprzedniej procedury.
  6. Wybierz przycisk OK.

Konfigurowanie wysokiej dostępności witryny internetowej przez utworzenie ogólnego skryptu w Menedżerze klastra trybu failover

Aby skonfigurować wysoką dostępność serwerów sieci Web usług IIS, skonfiguruj ogólny zasób skryptu, który będzie używany do monitorowania witryny internetowej i puli aplikacji dla witryny sieci Web:

  1. W każdym węźle klastra skopiuj skrypt podany na końcu tego artykułu na Windows\System32\inetsrv\Clusweb7.vbsadres .

  2. Domyślnie skrypt monitoruje witrynę internetową o nazwie Domyślna witryna sieci Web i pulę aplikacji o nazwie DefaultAppPool. Jeśli nie są to poprawne witryny sieci Web i puli aplikacji, zmień SITE_NAME and APP_POOL_NAME zmienne. Upewnij się, że ta sama witryna internetowa i pula aplikacji w skrycie istnieją we wszystkich węzłach klastra.

    Uwaga 16.

    W nazwach jest rozróżniana wielkość liter.

  3. Przejdź do pozycji Narzędzia administracyjne, a następnie wybierz pozycję Menedżer klastra trybu failover.

  4. Połącz się z klastrem. Jeśli znajdujesz się w jednym z węzłów klastra, klaster zostanie automatycznie wyświetlony na liście.

  5. Wykonaj jedną z następujących czynności:

    • W systemach Windows Server 2012, 2012 R2 i 2016 kliknij prawym przyciskiem myszy pozycję Role , a następnie wybierz pozycję Konfiguruj rolę , aby ją utworzyć.
    • W przypadku systemów Windows Server 2008 i 2008 R2 kliknij prawym przyciskiem myszy klaster, a następnie wybierz pozycję Konfiguruj usługę lub aplikację. Kreator tworzy obciążenie o wysokiej dostępności.
  6. Wybierz pozycję Skrypt ogólny.

  7. Wybierz plik skryptu z witryny %systemroot%\System32\Inetsrv\clusweb7.vbs.

  8. Ustaw nazwę punktu dostępu klienta (CAP) na nazwę witryny internetowej, która będzie używana przez klientów w celu nawiązania połączenia z witryną sieci Web o wysokiej dostępności. Określ statyczne adresy IP do użycia na potrzeby cap witryny internetowej. Jeśli używasz protokołu DHCP (Dynamic Host Configuration Protocol), ta opcja nie będzie wyświetlana.

  9. W kroku Wybierz magazyn wybierz dysk udostępniony klastra, na którym znajdują się pliki zawartości witryny internetowej. Magazyn powinien być nieużywany przez inną aplikację o wysokiej dostępności w klastrze.

    Uwaga 16.

    Jeśli udział plików używany do konfiguracji udostępnionej usług IIS jest hostowany w tym samym klastrze, w tym miejscu należy użyć innego zasobu dysku.

  10. Po potwierdzeniu ustawień kreator utworzy grupę klastrów, zasoby klastra i zależności między zasobami, a następnie przełączy zasoby w tryb online.

    Uwaga 16.

    Aby hostować wiele witryn internetowych o wysokiej dostępności w tym samym klastrze trybu failover, wykonaj te same kroki co powyżej. Należy jednak użyć innego pliku skryptu dla każdej witryny internetowej i innego klastrowanego magazynu udostępnionego. Na przykład w %systemroot%\System32\Inetsrvpliku użyj polecenia clusweb7.vbs dla pierwszej witryny internetowej clweb7-2.vbs dla drugiej, clweb7-3.vbs dla trzeciej itd. Każdy plik skryptu monitoruje inną witrynę internetową i pulę aplikacji.

Poniższy skrypt jest przeznaczony tylko do celów przykładowych i nie jest jawnie obsługiwany przez firmę Microsoft. Użycie tego skryptu w środowisku klastra usług IIS w wersji 7.0 lub nowszej jest zagrożone własnym ryzykiem.

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