How do I install IIS6?
IIS 6 is available on Windows 2003 only and is installed by default. You can
not install it on Windows XP or below.
How do I deploy an ISAPI DLL to IIS6?
Basically, you can use IIS6's "IIS 5 compatibility mode" to deploy the same
way as you did for IIS5. We do not recommend, nor do we support, deploying via
compatibility mode. Please use IIS6's "full mode":
- Create a new Application Pool for your IW applications
- Limit the pool to 1 (one) worker process
- Disable the scheduled recycling (or set it to values that won't hurt your
application)
- Grant sufficient permissions to the account that executes the App Pool
(especially the directory and files where your ISAPI is installed)
- Set an explicit ServerController.CacheDirectory and grant sufficient
permissions to it
- Set ServerController.ComInitialization to ciNone
How do I debug an ISAPI DLL on IIS6?
Note: These steps won't work on early IIS6 versions (Betas and RC's).
- Delphi needs to be installed on the machine where IIS6 is running. We have
not yet evaluated if remote debugging works.
- Enable "external debug symbols" in the project's linker options, and
recompile your application.
- Grant the "Debugger" role to the user account which is used for the
debugging.
- On a command line do a "net stop w3svc" to stop the "normal" web service.
(This will bring your IIS6 offline!!)
- Run w3wp.exe from the command line with the -debug switch (i.e."w3wp
-debug")
- Set the output directory of your project to have Delphi put the compiled
ISAPI dll directly into the ISAPI directory.
Note: For BDS 2006
you have to put \\?\ in front of the output directory. For example:
\\?\D:\intepub\scripts
- Attach the Delphi debugger to that process with the ISAPI project open.
- Instead of doing steps 3 and 4 you can set "w3wp -debug" as the "Host
Application" in your ISAPI project and just hit "Run" in Delphi.
What is a Worker Process?
A worker process is the "program" that will run all ISAPIs and their threads
on IIS6. As to the nature of processes, these processes are completely
isolated. If one process hangs or even terminates, all other Worker Processes
will continue to run. This provides some protection against ISAPI
applications that become unstable: if there is just one Worker Process (as in
IIS5), then the whole Web server stops working, i.e., all your Web sites are
down.
What is an Application Pool?
An Application Pool is a unique, separate "space" in which applications can
run, a space that can be configured with a specific number of Worker Processes,
specific automatic recycling options, etc. You can setup different Application
Pools for different ISAPI's and directories which may have different
needs. One big advantage is that you can recycle App Pools (i.e. all ISAPI
applications in that pool), and not just single ISAPIs or directories. If
you know, for example, that one of your ISAPIs is behaving badly (eats up
memory, crashes unexpectedly, etc.) you can put it in a "Frequent Recycle Pool"
and set its auto recycle options to a short interval or to recycle when it hits
the 100MB barrier.
I know what Recycling means for paper and bottles, but what the heck does
IIS 6 mean by "Recycle"?
Recycling an Application Pool means to unload all ISAPI DLL's (and free
associated resources) in that pool. By automatically recycling application
pools that are not being used less memory and resources are tied up on the
server, increasing resource utilization and improving server performance.
This is basically web server "garbage collection."
Why do I get an error like "Thread mode can not be reset"?
In IIS5 you had to explicitly set ServerController.ComInitialization to
ciMultithreaded if you were using COM stuff like ADO. That setting automatically
did the required COM initalization for all IW session threads. IIS6 initializes
all threads itself, that is, you must not do it yourself, thus ciNone should be
used. However, IW tries to recognize IIS6 and ignores the ComInitialization
setting if it detects IIS6, but you still have to remove all CoInitialize()
calls which you might have added for custom threads.
|