Windows Server yük devretme kümesinde IIS World Wide Web Yayımlama Hizmeti'ni yapılandırma

Bu makalede, Windows Server yük devretme kümesinde (WSFC) Microsoft Internet Information Services (IIS) World Wide Web Yayımlama Hizmeti'nin (W3SVC) nasıl yapılandırıldığı açıklanır.

Orijinal ürün sürümü: Windows Server 2008 ve sonraki sürümleri, Internet Information Services 8.0 ve sonraki sürümleri
Özgün KB numarası: 970759

Giriş

Bu makaledeki yordamlar yalnızca World Wide Web Yayımlama Hizmeti için geçerlidir. Yük devretme kümesinde FTP Yayımlama hizmetini yapılandırma yönergeleri için bkz. Windows Server yük devretme kümesinde IIS için FTP'yi yapılandırma.

Daha fazla bilgi

Internet Information Services'in önceki sürümlerinde Microsoft, Microsoft Kümeleme altyapısını kullanarak yüksek kullanılabilirlik Web sunucusu örneklerini desteklemek için genel kaynak izleyici bileşenleri sağlamıştı. Ancak, böyle bir çözümün potansiyelini tam olarak gerçekleştirmek için özel kod gerekiyordu. Ayrıca, Microsoft'un sağladığı genel betikler müşteri ihtiyaçlarını karşılamadı. Windows Server yük devretme kümelemesi kullanan kümelenmiş bir ortamda IIS 7.0 veya sonraki bir sürümü yapılandırmak için, bu kadar yüksek kullanılabilirlik senaryosunu etkinleştirmek için özel bir (betik oluşturma) kodu kullanmanız gerekir. Bunu yaptığınızda, kullanıcılar kendi gereksinimlerini karşılamak için kurulumu özelleştirebilir. web uygulamalarının yüksek kullanılabilirlik tümleştirmesi üzerinde tam denetim sağlar. Ayrıca, IIS 7.0'da kullanıma sunulan yönetim ve izleme için betik arabirimleri, daha önce sağlanan betiklerden daha zengin bir ortam sağlar.

Not

IIS 7.0 yükleme dosyaları, IIS küme yönetim görevleri için IIS 6.0'da kullanılan Clusweb.vbs ve Clusftp.vbs betik dosyalarını yanlış şekilde içerir. Bu betikleri IIS 7.0 veya sonraki bir sürümle kullanmayın.

Yöneticilerin yük devretme kümelemesi yerine IIS 7.0 veya sonraki bir sürümü çalıştıran birden çok sunucuya sahip Web uygulamalarının ölçeklenebilirliğini ve kullanılabilirliğini geliştirmek için birincil ve tercih edilen yöntem olarak Ağ Yükü Dengeleme (NLB) kullanımını dikkatle değerlendirmelerini öneririz. NLB'nin avantajlarından biri, tüm sunucuların gelen Köprü Metni Aktarım Protokolü (HTTP) isteklerinin eşzamanlı işlenmesine etkin bir şekilde katılabilmesidir. Bir diğer avantajı da NLB IIS ortamında, web uygulamalarının yüksek kullanılabilirliğini sağlarken sıralı güncelleştirmeleri ve geri almaları desteklemenin çok daha kolay olmasıdır. NLB ortamında IIS 7.0 veya sonraki bir sürümü kullanma hakkında daha fazla bilgi için aşağıdaki makalelere bakın:

IIS hizmetlerini kümeleme yoluyla IIS'yi kümelemenin Web uygulamaları için her zaman yüksek kullanılabilirlik çözümü garanti etmediğini göz önünde bulundurmak önemlidir. IIS hizmetleri (özellikle WWW hizmeti) çalışır durumda olsa da, belirli bir uygulama havuzunun barındırma işlemi sonlandırılabilir veya uygulama iç sunucu HTTP hataları atıyor olabilir. Web uygulamalarını kümeleme ve özel bir betik kullanarak sistem durumunu izleme, yük devretme kümelemesi kullanarak yüksek kullanılabilirliğe sahip bir IIS kümesi elde etmenin doğru ve önerilen yoludur. Aşağıda, bir uygulama havuzunun başlatılıp başlatılmadığını belirlemek için durumunu izleyen örnek bir betik verilmiştir.

Yük devretme kümelemesi kullanarak IIS 7.0 veya sonraki bir Sürüm Web sunucusu için yüksek kullanılabilirlik yapılandırmak için aşağıdaki adımları izleyin. 3 ile 7. adımlar aşağıda daha ayrıntılı olarak açıklanmıştır. Bu makalenin devamında yer alan örnek betik, IIS 7.0 veya sonraki bir sürüm için örnek olarak kullanılabilir.

  1. Tüm küme düğümlerine Web Sunucusu rolünü yükleyin. Ayrıntılar için bkz. IIS 7 Dağıtım Kılavuzu.
  2. Yük devretme kümelemesi özelliğini tüm küme düğümlerine yükleyin ve kümeyi oluşturun. Ayrıntılar için bkz . Yük Devretme Kümesi Dağıtım Kılavuzu.
  3. IIS paylaşılan yapılandırması için kullanılacak bir dosya paylaşımı ayarlayın.
  4. Tüm küme düğümlerinde IIS paylaşılan yapılandırmasını yapılandırın.
  5. Tüm küme düğümlerinde paylaşılan yapılandırma için IIS Çevrimdışı Dosyalarını yapılandırın.
  6. Web sitesini (ilişkili uygulama havuzu dahil) yapılandırın ve içeriğinin konumunu bir küme düğümünde belirtin.
  7. Yük devretme kümelemesinde genel bir betik oluşturarak web siteniz için yüksek kullanılabilirliği yapılandırın.

IIS paylaşılan yapılandırması için kullanılacak bir dosya paylaşımı ayarlama

  1. IIS paylaşılan yapılandırması için kullanılacak paylaşıma erişecek bir kullanıcı oluşturun.
  2. Dosya paylaşımını oluşturun. Bu paylaşım, tüm küme düğümlerinde IIS arasında paylaşılacak IIS paylaşılan yapılandırmasını depolamak için kullanılır. Birden çok seçenek vardır:
  3. 2. adımda oluşturduğunuz paylaşım üzerindeki izinleri ayarlayın. 1. adımda oluşturduğunuz kullanıcıya dosya paylaşımı ve NTFS izinleri verin.
  4. Tüm küme düğümlerinin dosya paylaşımına göz atabildiğini onaylayın. Dosya paylaşımının yolu şeklindedir \\<fileserver>\<share>.

Tüm küme düğümlerinde IIS paylaşılan yapılandırmasını yapılandırma

Not

için eksik ayrıcalıklar nedeniyle Windows 2008 Server'da IIS paylaşılan yapılandırmasıyla Application Host Helper Serviceilgili bir sorun var. Paylaşılan yapılandırmanın çalışması için Windows 2008 Server'da IIS paylaşılan yapılandırmasını ayarlarken bu adımları izlemeniz gerekir.

  1. Bir yönetim komut istemi açın.

  2. Aşağıdaki komutu çalıştırın:

    net stop apphostsvc
    
  3. Aşağıdaki komutu çalıştırın:

    sc privs apphostsvc SeChangeNotifyPrivilege/SeTcbPrivilege/SeImpersonatePrivilege
    
  4. Aşağıdaki komutu çalıştırın:

    net start apphostsvc
    

Kümedeki her Windows 2008 Sunucusunda bu adımları tamamladıktan sonra, bu bölümde açıklandığı gibi IIS paylaşılan yapılandırmasını ayarlamaya devam edin.

Küme düğümlerinden birinde, paylaşılan yapılandırmayı dosya paylaşımına aktarın:

  1. Yönetim Araçları'na gidin ve Internet Information Services (IIS) Yöneticisi'ne tıklayın.
  2. Sol bölmede sunucu adı düğümünü seçin.
  3. Paylaşılan Yapılandırma simgesine çift tıklayın.
  4. Yapılandırma dosyalarını yerel bilgisayardan başka bir konuma aktarmak için Paylaşılan Yapılandırma sayfasında, Eylemler bölmesinde (sağ bölme) Yapılandırmayı Dışarı Aktar'ı seçin.
  5. Yapılandırmayı Dışarı Aktar iletişim kutusunda, Fiziksel yol kutusuna dosya paylaşımının (\\<fileserver>\<share>) yolunu yazın.
  6. Farklı Bağlan'ı seçin ve paylaşılan yapılandırmanın depolandığı paylaşıma erişimi olan kullanıcı hesabının kullanıcı adını ve parolasını yazın ve ardından Tamam'ı seçin. Bu hesap paylaşıma erişmek için kullanılır. Etki alanı yöneticisi olmayan kısıtlı bir Active Directory hesabı kullanmalısınız.
  7. Yapılandırmayı Dışarı Aktar iletişim kutusunda, şifreleme anahtarlarını korumak için kullanılacak bir parola yazın ve ardından Tamam'ı seçin.
  8. Paylaşılan Yapılandırma sayfasında Paylaşılan yapılandırmayı etkinleştir onay kutusunu seçin.
  9. Daha önce girdiğiniz fiziksel yolu, kullanıcı hesabını ve parolayı yazın ve eylemler bölmesinde Uygula'yı seçin.
  10. Şifreleme Anahtarları Parolası iletişim kutusunda, daha önce ayarladığınız şifreleme anahtarı parolasını yazın ve tamam'ı seçin.
  11. Paylaşılan Yapılandırma iletişim kutusunda Tamam'ı seçin.
  12. Tamam'ı seçin.

Diğer küme düğümlerinin her birinde, dosya paylaşımına yeni dışarı aktardığınız paylaşılan yapılandırmayı kullanın:

  1. Yönetim Araçları'na gidin ve Internet Information Services (IIS) Yöneticisi'ne tıklayın.
  2. Sunucu adı düğümünü seçin.
  3. Paylaşılan Yapılandırma simgesine çift tıklayın.
  4. Paylaşılan Yapılandırma sayfasında Paylaşılan yapılandırmayı etkinleştir onay kutusunu seçin.
  5. Dosya paylaşımının (\\<fileserver>\<share>), kullanıcı hesabının ve daha önce girdiğiniz parolanın fiziksel yolunu yazın ve eylemler bölmesinde Uygula'yı seçin.
  6. Şifreleme Anahtarları Parolası iletişim kutusunda, daha önce ayarladığınız şifreleme anahtarı parolasını yazın ve tamam'ı seçin.
  7. Paylaşılan Yapılandırma iletişim kutusunda Tamam'ı seçin.
  8. Tamam'ı seçin.

Not

IIS'de paylaşılan yapılandırmaları ayarlama hakkında daha fazla bilgi için Paylaşılan Yapılandırma'yı ziyaret edin.

Tüm küme düğümlerinde paylaşılan yapılandırma için IIS Çevrimdışı Dosyalarını yapılandırma

Her küme düğümünde Çevrimdışı Dosyalar'ı etkinleştirin:

  1. Masaüstü Deneyimini Yükleme

    1. Yönetim Araçları'na gidin ve Sunucu Yöneticisi'ı seçin.
    2. Sol bölmede Özellikler'i seçin.
    3. Sağ bölmede Özellik Ekle'yi seçin.
    4. Windows sürümünüz için uygun olan aşağıdakilerden birini yapın:
      • Windows Server 2016 için Masaüstü Deneyimi ile Sunucu Yükleme sayfasını ziyaret edin.
      • Windows Server 2102 ve 2012 R2 için özellikler listesindeki Kullanıcı Arabirimleri ve Altyapılar'ın altında Masaüstü Deneyimi'ni seçin.
      • Windows Server 2008 ve 2008 R2 için Masaüstü Deneyimi'ni seçin.
    5. Masaüstü Deneyimi'ni yüklemek için Yükle'yi seçin.
    6. Bilgisayarınızı yeniden başlatın.
  2. Şunlardan birini yapın:

    • Windows Server 2012, 2012 R2 ve 2016 için, Denetim Masası Eşitleme Merkezi'ni ve ardından Çevrimdışı dosyaları yönet'i seçin.
    • Windows Server 2008 ve 2008 R2 için Denetim Masası'da Çevrimdışı Dosyalar'ı seçin.
  3. Çevrimdışı Dosyaları Etkinleştir'i seçin. Bilgisayarı şu anda yeniden başlatmayın.

  4. Önbelleğin salt okunur olarak ayarlandığından emin olun. Bunu yapmak için, yükseltilmiş bir cmd isteminde aşağıdaki komutu çalıştırın:

    REG ADD "HKLM\System\CurrentControlSet\Services\CSC\Parameters" /v ReadOnlyCache /t REG_DWORD /d 1 /f
    
  5. Bilgisayarınızı yeniden başlatın.

  6. Bilgisayardan dosya sunucusuna gidin. IIS paylaşılan yapılandırmasını içeren paylaşıma sağ tıklayın ve ardından Her Zaman Çevrimdışı Kullanılabilir'i seçin.

    Not

    Dosya paylaşımını IIS düğümlerini barındıran aynı yük devretme kümesinde yüksek oranda kullanılabilir olacak şekilde ayarlarsanız, üzerinde olduğunuz küme düğümü yüksek oranda kullanılabilir dosya sunucusunu barındırıyorsa paylaşıma sağ tıkladığınızda Her Zaman Kullanılabilir Çevrimdışı seçeneği görünmez. Yüksek kullanılabilir dosya sunucusu uygulamasını başka bir düğüme taşımanız gerekir.

  7. Denetim Masası'da Çevrimdışı Dosyalar'ı açın. Eşitleme Merkezi'ni Aç'ı ve ardından Zamanla'yı seçin.

  8. Her gün için veya gereksinimlerinize göre çevrimdışı dosya eşitlemesi zamanlayın. Çevrimdışı eşitlemeyi birkaç dakikada bir çalışacak şekilde de yapılandırabilirsiniz. Zamanlayıcı ayarlamasanız bile, Applicationhost.config dosyasındaki bir şeyi değiştirdiğinizde, değişiklik Web sunucusuna yansıtılır.

Not

IIS'de paylaşılan bir yapılandırma için çevrimdışı dosyaları yapılandırma hakkında daha fazla bilgi için bkz. Paylaşılan Yapılandırma için Çevrimdışı Dosyalar.

Web sitesini yapılandırın ve içeriğinin konumunu bir küme düğümünde belirtin

Web sitesi içerik dosyalarının kalacağı küme disk kaynağının sahibi olan küme düğümünü bulun:

  1. Yönetim Araçları'na gidin ve Yük Devretme Kümesi Yöneticisi'ne tıklayın.
  2. Kümeye bağlanın. Küme düğümlerinden birindeyseniz, küme otomatik olarak listede görünür.
  3. Depolama altında, Web sayfası içeriğinin bulunacağı disk kaynağını bulun. Bunu yapmak için disk kaynağının depolama ağacını genişletin. Depolama alanının kümedeki diğer yüksek kullanılabilirlik uygulamaları tarafından kullanılmadığından emin olun. Depolama alanını Kullanılabilir Depolama altında bulabilirsiniz.
  4. Bu kaynağın çevrimiçi olduğu küme düğümü. Bu küme düğümünde IIS'yi yapılandıracaksınız.
  5. Küme disk kaynağı adı.

Bunu içerik dosyaları için kullanacaksınız. Kaynağın çevrimiçi olduğu küme düğümünde Web sunucusunu web sitesi içeriği için paylaşılan diski kullanacak şekilde yapılandırın:

  1. Yönetim Araçları'na gidin ve Internet Information Services (IIS) Yöneticisi'ne tıklayın.
  2. Sol bölmede sunucu adı düğümünü genişletin.
  3. Siteler'i genişletin ve Siteler'in altında yapılandırdığınız siteyi seçin.
  4. Sağ bölmede, Web Sitesini Yönet'in altında Gelişmiş Ayarlar'ı seçin.
  5. Genel ayarlar'ın altında Fiziksel Yol özelliğini bulun ve web sitesi içerik dosyalarının bulunduğu konumu yazın. Önceki yordamın 5. adımında not ettiğiniz küme disk kaynağının konumudur.
  6. Tamam'ı seçin.

Yük Devretme Kümesi Yöneticisi'nde genel bir betik oluşturarak web siteniz için yüksek kullanılabilirliği yapılandırma

IIS Web sunucuları için yüksek kullanılabilirliği yapılandırmaya yönelik son adım için, web sitesinin web sitesini ve uygulama havuzunu izlemek için kullanılacak genel betik kaynağını ayarlayın:

  1. Her küme düğümünde, bu makalenin sonunda sağlanan betiği öğesine Windows\System32\inetsrv\Clusweb7.vbskopyalayın.

  2. Varsayılan olarak, betik Varsayılan Web Sitesi adlı bir web sitesini ve DefaultAppPool adlı bir uygulama havuzunu izler. Bunlar doğru web sitesi ve uygulama havuzu değilse değişkenleri değiştirin SITE_NAME and APP_POOL_NAME . Betikteki aynı web sitesinin ve uygulama havuzunun tüm küme düğümlerinde mevcut olduğundan emin olun.

    Not

    Adlar büyük/küçük harfe duyarlıdır.

  3. Yönetim Araçları'na gidin ve Yük Devretme Kümesi Yöneticisi'ne tıklayın.

  4. Kümeye bağlanın. Küme düğümlerinden birindeyseniz, küme otomatik olarak listede görünür.

  5. Şunlardan birini yapın:

    • Windows Server 2012, 2012 R2 ve 2016 için Roller'e sağ tıklayın ve ardından Rolü Yapılandır'ı seçerek oluşturun.
    • Windows Server 2008 ve 2008 R2 için kümeye sağ tıklayın ve ardından Hizmet veya Uygulama Yapılandır'ı seçin. Sihirbaz yüksek kullanılabilirlik iş yükünü oluşturur.
  6. Genel Betik'i seçin.

  7. dosyasından betik dosyasını %systemroot%\System32\Inetsrv\clusweb7.vbsseçin.

  8. İstemci Erişim Noktası (CAP) adını istemcilerin yüksek kullanılabilirlik web sitesine bağlanmak için kullanacağı web sitesi adı olarak ayarlayın. Web sitesi CAP için kullanılacak statik IP'leri belirtin. Dinamik Ana Bilgisayar Yapılandırma Protokolü (DHCP) kullanıyorsanız bu seçenek görüntülenmez.

  9. DepolamaYı Seç adımında, web sitesi içerik dosyalarının bulunduğu küme paylaşılan diskini seçin. Depolama, kümedeki diğer yüksek kullanılabilirlik uygulamaları tarafından kullanılmamalıdır.

    Not

    IIS paylaşılan yapılandırması için kullanılan dosya paylaşımı aynı kümede barındırılıyorsa, burada farklı bir disk kaynağı kullanılmalıdır.

  10. Ayarları onayladıktan sonra sihirbaz küme grubunu, küme kaynaklarını ve kaynaklar arasındaki bağımlılıkları oluşturur ve ardından kaynakları çevrimiçi duruma getirir.

    Not

    Aynı yük devretme kümesinde birden çok yüksek kullanılabilirlik web sitesi barındırmak için yukarıdaki adımları izleyin. Ancak, her web sitesi ve farklı kümelenmiş paylaşılan depolama alanı için farklı bir betik dosyası kullanın. Örneğin, içinde %systemroot%\System32\Inetsrvilk web sitesi için clusweb7.vbs , ikinci web sitesi için clweb7-2.vbs , üçüncü web sitesi için clweb7-3.vbs vb. kullanın. Her betik dosyası farklı bir web sitesini ve uygulama havuzunu izler.

Aşağıdaki betik yalnızca örnek amaçlıdır ve Microsoft tarafından açıkça desteklenmez. Bu betiğin IIS 7.0 veya sonraki bir sürüm kümelenmiş ortamda kullanılması kendi risk altındadır.

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