KnowledgeBase Archive

An Archive of Early Microsoft KnowledgeBase Articles

View on GitHub

Q239703: ASP Template Cache Does Not Recognize Script Updates on Cluster

Article: Q239703
Product(s): Internet Information Server
Version(s): 4.0,5.0
Operating System(s): 
Keyword(s): 
Last Modified: 08-MAY-2002

-------------------------------------------------------------------------------
The information in this article applies to:

- Microsoft Internet Information Server versions 4.0, 5.0 
-------------------------------------------------------------------------------

SYMPTOMS
========

Active Server Pages (ASP) may not recognize or return updated ASP script files
when Internet Information Server (IIS) is installed and running on Microsoft
Cluster Server.

CAUSE
=====

The ASP template cache is never cleared or updated after a required Cluster
Server disk resource is taken off line due to a manual (test) failover. In a
usual cluster environment, a disk device failover should only occur after a node
has failed (crashed). This problem does not occur in a production cluster
environment, in which the device failover occurs because the node has actually
failed, so that applications and system services are reset by the system
restart.

The ASP template cache tracks directory changes to determine when a cached script
file in the directory has been updated, and needs to be purged from the cache
and reloaded. In a cluster environment, tracking directory changes requires more
caution because Cluster Server allows a volume (disk mounted by a file system)
to be dismounted while applications are running with open handles to the volume,
which allows the device to be taken off line immediately. When a volume is
dismounted, any open handles to that volume are no longer valid for reading,
writing, or tracking directory change notifications.

Cluster-aware applications can request notifications from Cluster Server when a
volume has been dismounted; however, ASP is not cluster aware, so it is not
notified to clear the template cache after a device is taken offline. Because
ASP can no longer detect changes to script files in the monitored directory, it
never purges the template cache, and subsequent changes to script files on the
cluster device are not reflected until IIS is stopped and restarted.

WORKAROUND
==========

To work around this problem, disable ASP template caching, and then use a script
that unloads the IIS application when a required device is off line.

To disable ASP Template Caching, please modify the registry entry
"DisableMemoryCache" mentioned in Q301310 IIS 5 Common Registry Parameters (1 of
2)"

This workaround allows reliable use of the ASP cache with a script that flushes
the cache when the site changes states. The script accomplishes this task by
using the Active Directory Service Interfaces (ADSI) AppUnload method for the
affected site when it is brought back online by cluster, which effectively
flushes the ASP cache.

The following is a sample script that flushes the cache for the root site:

  ' unloadapps.vbs sample
  const ForReading = 1,_ 
  ForAppending = 8
  const Path = "C:\unloadapps"

  Sub LogError(ByVal FileName, ByVal Err, ByVal Detail)

  DIM a
  Dim fileio
  Dim Seperator

  on error resume next
  Seperator = " "

  set fileio = CreateObject("Scripting.FileSystemObject")
  if fileio.FolderExists(Path) = FALSE then
  fileio.CreateFolder(Path)
  end if
  Set a = fileio.OpenTextFile(Path + "\" + FileName, ForAppending, TRUE)
  a.Write("Time: " + Time() + Seperator)
  a.Write("Error: " + Hex(Err.Number) + Seperator)
  a.Write("Description: " + Err.Description + Seperator)
  a.WriteLine("Detail: " + Detail + Seperator)
  a.Close
  set a = nothing
  set fileio = nothing

  End Sub

  Sub Main()

  Dim PathList
  Dim Path
  Dim FileName

  on error resume next
  IIsObjectPath = "IIS://Localhost"
  Set IIsObject = GetObject (IIsObjectPath)
  PathList = IIsObject.GetDataPaths ("appwamclsid", IIS_DATA_INHERIT)
  FileName = Replace(Date(),"/","-") + " unloadapps.log"
  For Each Path in PathList

  Set IISObject2 = GetObject (Path)
  If Path = "IIS://Localhost/W3SVC" then
  else

  IISObject2.AppUnload()
  if err.number > 0 then

  LogError FileName,err,"Failed to unload " + Path
  err.clear

  else

  LogError FileName,err,"Successfully unloaded application " + Path

  end if

  end if

  Next

  End Sub

  Main

The script must be added to the IIS cluster group as a process that is dependent
on the site. To do this, perform the following steps:

1. Copy the Unloadapps.vbs file to the c:\Scripts\Unloadapps.vbs directory on
  all cluster nodes.

2. In the Cluster Administrator, create a new generic application resource in
  the IIS cluster group named "Flush ASP Cache" (without the quotation marks),
  and then click Next.

3. Allow all nodes to be possible owners, and then click Next.

4. Place a resource dependency on the IIS server resource, and then click Next.

5. From a command line, type "cmd /k cscript c:\scripts\unloadapps.vbs" (without
  the quotation marks). (Note that this is different from the previous
  instructions, so that the process stays open until the next failover and does
  not get reported as resource failed.)

6. Set the current directory to c:\scripts.

7. Do not select Allow application to interact with desktop.

8. Click Next, and then click Finish.

9. Test failover to make sure the cache is flushed as expected.

Additional query words: 4.00

======================================================================
Keywords          :  
Technology        : kbiisSearch kbiis500 kbiis400
Version           : :4.0,5.0
Hardware          : ALPHA x86
Issue type        : kbprb
Solution Type     : kbfix

=============================================================================

THE INFORMATION PROVIDED IN THE MICROSOFT KNOWLEDGE BASE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND. MICROSOFT DISCLAIMS ALL WARRANTIES, EITHER EXPRESS OR IMPLIED, INCLUDING THE WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL MICROSOFT CORPORATION OR ITS SUPPLIERS BE LIABLE FOR ANY DAMAGES WHATSOEVER INCLUDING DIRECT, INDIRECT, INCIDENTAL, CONSEQUENTIAL, LOSS OF BUSINESS PROFITS OR SPECIAL DAMAGES, EVEN IF MICROSOFT CORPORATION OR ITS SUPPLIERS HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. SOME STATES DO NOT ALLOW THE EXCLUSION OR LIMITATION OF LIABILITY FOR CONSEQUENTIAL OR INCIDENTAL DAMAGES SO THE FOREGOING LIMITATION MAY NOT APPLY.

Copyright Microsoft Corporation 1986-2002.