When training on IIS 6, I generate a list of tasks that you need to do or at least be aware of before and after you migrate. I haven't posted this before because I haven't had time to fill it out with full explanations. That day may never come, so I thought it might be useful to post at least the list here.
This list is of course incomplete, but should help you to avoid common problems as well as a few of those that are uncommon but difficult to troubleshoot. In particular, this is designed to troubleshoot/avoid issues of the sort "it used to work on IIS 5 but fails on IIS 6"
1. Use the Log Parser Tool to scan your IIS 5 log files and identify all executables. These must be defined in Web Service Extensions or you have to disable Web Service Extensions by allowing all executables.
2. Use the Log Parser Tool to scan your IIS 5 log files and identify all extensions that in use. You will need to define MIME maps for those that are not defined in IIS 6 and it points the way to identifying script engines that need to be installed.
3. Reset Application Pool recycling to something other than every 29 hours, the absurd default. DO recycle, however, if you can.
4. Consider disabling automatic shutdown of Application Pools after 20 minutes of inactivity. You may not need too and it takes a while for the first request to launch when the pool doesn't exist.
5. Enable logging of Protocol Substatus in the IIS log Files (IIS W3C format).
6. Use Metabase Explorer or other means to set the LogEventOnRecycle Metabase property in the Application Pools key to 255. This will cause all recycle events to be recorded in the event logs.
7. Identify any IIS 5 filters that use Read_Raw_Data before you migrate. Here's the syntax to use MDUTIL to query the settings for the ISAPI filter sspiflit:
Mdutil get w3svc/filters/sspifilt/filterflags
If the result shows ReadRawData you have to run in IIS 5 mode or rewrite the filter.
8. If using custom identities for application pools, make SURE they are members of the IIS_WPG. Not optional.
9. For asp.net content, assign the IIS_WPG read permissions to web content unless running with unique identities for security isolation between websites. In that case, place the unique identity in the IIS_WPG but use the unique identity for ACLS, not the IIS_WPG. See http://www.microsoft.com/technet/prodtechnol/windowsserver2003
/technologies/webapp/iis/appisoa.mspx for details.
10. Identify any CGI applications (.exe's typically) and permit additional rights for the process identity.
11. Identify HTTP.sys default values that may interfere with your application. There are limits on the url content, url segment length, client submission size, etc. Also HTTP.sys strictly enforces http 1.1 and 1.0 standards. If you have a monitoring system delivering sloppy requests to IIS 6, those may get rejected and there is no "AcceptSloppyHTTP" registry settings.
12. Determine if overlapping recycling causers problems for your applications. If so, disable it. See the IIS 6 Resource Kit for details.
13. Identify if your applications have any dependencies on the IIS 5 architecture such as running as the IWAM or System account.
14. Be aware that when creating new virtual directories on UNC paths, the default is to "pass through" the user's credentials. This will probably fail unless your using Basic or Kerberos with delegation enabled.
15. If your applications use Parent Paths (dotted notation), you will need to enabled that in IIS 6.
16. Determine if your applications are stable when you enable AspExecuteinMTA for multi-threaded ASP. Can get a good performance boost here as long as COM in your applications gets along in the MTA.
17. Identify an services using mapped drives on Windows 2000. You will likely need to find another way to do this on Windows 2003.
18. Consider enabling compression
19. Install CDONTS if you require it. Tip: Don't install SMTP just to deliver email from your application. Instead use one of the many SMTP objects you can invoke in your script. This way, you don't have 24/7 server online that you have to configure, administer, hotfix, secure, etc. The SMTP object delivers mail just fine and is non-existent when the page that creates it goes out of scope.
20. Identify ASP.net process elements that need to be configured in the IIS 6 user interface.
21. Be aware that you may need to increase the number of connections permitted to an application pool on a high volume server.
by Brett Hill IIS MVP