IIS Applications and Virtual Directories
Overview
I've noticed in helping developers on the various forums and newsgroups
that there is a severe shortage of information about IIS Applications.
For instance, just try to find even a definition, let alone
more details, and yet understanding the basics of IIS Applications is crucial in ASP.NET.
This article aims to provide the basics, applicable to both classic ASP
and ASP.NET, and then the next article will add
ASP.NET specific details.
IIS Web-Site Basics
A web-site in IIS is just a logical collection of files and directories,
with a starting point, called the web-root, mapped to a physical location.
Each web-site is accessed through a domain name, or intranet server name,
that is then mapped to the web-root of the site, not the physical location.
We refer to documents in the web-site using /Directory/File.ext notation,
where the initial forward-slash (/) refers to the web-root defined in IIS.
IIS in Win 2K/XP Pro, typically used in development, supports one web-site,
whereas Win 2K/2003 Server, used in production, supports multiple web-sites.
Why does this matter? We are basically forced to use sub-directories in
development, yet the ideal situation is that we will deploy to a web-root.
I can't count how many web-sites I visit that automatically redirect me to
a hard-coded sub-directory -- simply because that's the way it was developed!
Virtual Directories
A sub-directory of a web-site in IIS can be either a physical sub-directory,
or it can be a Virtual Directory that is logically mapped to that location.
It really should not matter whether the directory is a physical sub-directory
or a Virtual Directory, just like the location of the web-root isn't exposed.
In most production cases, especially with shared web-hosts, you will only be
able to create physical sub-directories, probably using FTP or similar tools.
If you open up the Internet Services Manager in your Administrative Tools,
also called IIS Manager, and drill down you will see the logical structures.
Physical directories are shown with a folder icon, while Virtual Directories
are shown with a special folder icon that has a globe as part of the icon.
You may also see another icon, either a box around a globe icon (Win 2K/XP)
or a gear icon (W2003), which indicates the directory is an IIS Application.
IIS Applications
An IIS Application is a directory, physical or virtual, that has been setup
in a manner that makes it logically independent from the rest of the web-site.
Its purpose is basically to make sub-directories act just like real web-sites,
which is very useful on Win 2K/XP Pro, but not really necessary on a Server.
Its important to understand that you cannot create an IIS Application simply
using FTP or similar tools -- and this is the cause of many ASP.NET problems.
So how do you create an IIS Application? First, VS.NET automatically makes
all new web projects into IIS Applications, whether you want it to be or not.
Otherwise, you need to use IIS Manager to create or setup an IIS Application,
or get your web-host to do it for you (WebHost4Life.com has a tool for this).
The easiest technique is to use IIS Manager to create a new Virtual Directory
-- it will also be an IIS Application by default, which adds to the confusion.
Application Settings
The
alternative is much more revealing, so you really need to try it yourself.
Using the IIS Manager, select any directory and then go to its property pages,
then go to the Directory tab (may be labeled Virtual Directory or Home Directory).
The bottom half of this form will be labeled Application Settings and you will
see either a Create or a Remove button -- if you see the Create button then it
is not an IIS Application, if the Remove button then it is an IIS Application.
Notice that some of the other items are only available for IIS Applications:
Application Name, Configuration, Application Protection, and possibly Unload.
The Configuration button brings up a dialog to map file extensions to ASP.NET,
or other processes, as well as options like session state enable and timeout.
The Application Protection drop-down determines if this IIS Application is to
be isolated in its own process, pooled with other apps, or in-process with IIS.
Application Details
An IIS Application is basically a logical web-site, isolated from all others,
and this is true for both classic ASP and ASP.NET; there's just more to ASP.NET.
This means that Application and Session variables are not shared with other IIS
applications, and Server.Execute/Transfer also has some chances for failure, or
at least some odd behavior, when the new url is in a different IIS Application.
See the next article for the additional
ASP.NET specific application details.
IIS Applications also have events that can be defined in a global.asa/asax file.
Global.asa/asax events only get executed for IIS Applications, and only if the
file is at the app-root -- note that "asa" stands for Active Server Application.
IIS Applications start when the first page in them is requested, and continue
to run until they are stopped, either manually with the Unload button, or due
to timeouts or other constraints automatically applied in ASP.NET configuration.
Conclusion
Hopefully I have succeeded in filling in some basic missing information about
IIS Applications, which will continue in my next article on
ASP.NET specifics.
Some of the topics specific to ASP.NET include Cache, statics, bin folder, and
authentication, and I will also show you how to correctly code your applications
so that they will work the same at the web-root as they do in IIS Applications.
My pet peeve: please do not confuse IIS Applications with Virtual Directories.
Author Bio
Paul Wilson is a software architect in Atlanta, currently with a medical device company.
He specializes in Microsoft technologies, including .NET, C#, ASP, SQL, COM+, and VB.
His
WilsonWebForm
Control allows Multiple Forms and Non-PostBack Forms in ASP.NET.
He is a Microsoft MVP in ASP.NET and is also recognized as an ASPFriend's
ASPAce/ASPElite.
He is a moderator on Microsoft's
ASP.NET Forums, as well as one of the top posters.
He is certified in .NET (MCAD), as well as also holding the MCSD, MCDBA, and MCSE.
Please visit his website,
www.WilsonDotNet.com,
or email him at
Paul@WilsonDotNet.com.