Introduction
Any developer would agree that Microsoft products, especially the IIS, often throw up unusual situations. This mainly happens after a major product upgrade. We get so used to the old one that we want to hang on to that forever and refuse to adjust to the settings of the new version. The objective of this paper is to describe the idiosyncrasies of IIS (mainly 7.5) that I have faced under different situations. I have documented some of the problems and their solutions.
The intention is to get a knowledge base going so that others could benefit from these tips and save some valuable time brainstorming on those completely confusing error messages that IIS throws up!!
Note – For each situation mentioned below, I have also mentioned the version of IIS and the Operating System on which they were encountered. The solutions would also be specific to that Operating System unless otherwise mentioned. You need to adjust accordingly if you are using some other OS.
Problem #1 - Problem Hosting WCF Services in IIS (IIS 7.5, OS – Windows 7)
If you are hosting WCF services .svc file 1st time on IIS 7.5, you are most likely to get the following error:
404 – Not Found - The page you are requesting cannot be served because of the extension of the configuration. If the page is a script, add a handler. If the file should be downloaded, add a MIME map.
This is because the HTTP Handler configured by default for any virtual directory will not have the mapping for the .svc extension. This is what you have to do to get things working:
- Go to command prompt.
- Navigate to the following folder using DOS command:
C:\Windows\Microsoft.Net\Framework\v3.0\Windows Communication Foundation
- Type:
ServiceModelReg –i
You should be all set. Now if you go to your directory and check Handler Mappings, you should see .svc mapped to svc-ISAPI-2.0. Refer to the screenshot below:
Problem #2 - Cannot see Windows Authentication in IIS (IIS 7.5, OS – Windows 7)
By default, IIS 7.0 has only the following authentication modes:
- Anonymous (Enabled by default)
- Impersonation (Disabled by default)
- Forms (Disabled by default)
What happened to the good old Windows Authentication? Well, to make things easy for us (pun intended), Microsoft decided not to enable them by default. If you need to see them in your IIS Authentication page, then you need to do the following things:
- Go to - Start -->Control Panel -> Programs and Features
- Click -> Turn Windows Features On / OFF on the left hand pane
- Find Internet Information Services and expand
- Expand World Wide Web Services
- Expand Security
- Select the Windows Authentications from the list and click OK.
Refer to the screenshots below:
Problem #3 - Error - Login Failed for User 'IIS APPPOOL\Classic .NET
I encountered this when my Web service was trying to access a database with Windows Credentials. The Host Server has SQL Server 2008 and the HTTP request was routed through IIS 7.5.
The solution to this problem lies in changing the Identity
property of the process model of the Classic .NET Application pool. If this has occurred, then most probably, you have your virtual directory mapped to Classic .NET App Pool.
- Open IIS Manager (Run -> inetmgr)
- In IIS Manager, Select Application Pools
- Right Click -> Classic .NET App Pool. Click Advanced Settings
- Browse to the Identity Property in Process Model
- Change it from
ApplicationPool
Identity to Local System
You should be all set. Refer to the screenshots below:
Problem #4 - Problem Hosting HTTP Handlers (IIS 7.5, OS – Windows 7)
I faced this problem when I was trying to host a HTTP Handler in IIS 7.5. I placed my DLL in the Bin folder of my virtual directory and set up a web.config file with the necessary ISAPI filter mapping. When I was trying to access the HTTP handler, I got the following error message:
HTTP Error 500.23 - Internal Server Error
An ASP.NET setting has been detected that does not apply in Integrated managed pipeline mode.
This might be because your virtual directory is mapped to an Application Pool which has Managed Pipeline Mode = Integrated. You need to change it to Classic. To do that, follow either of the following:
Method #1 – Change the Managed Pipeline mode of the Application Pool that your virtual directory is mapped to. By default, your virtual directory will be mapped to the DefaultAppPool
which works on Integrated Managed Pipeline mode.
- Open IIS manager (Run -> inetmgr)
- Click on Application Pools. Select the
DefaultAppPool
-> Double Click - Change the managed Pipeline Mode from Integrated to Classic.
Method #2 – Create a new Application for your virtual directory:
- In Inetmgr -> Select your Web Directory
- Right Click -> Remove
- Right Click -> Select Convert to Application.
- Select
Classic.NetAppPool
.
You should be all set. In either case, you are mapping your Virtual Directory to communicate using Classic Managed Pipeline Mode.
Refer to the screenshots below:
Summary
I hope this document helps explain some of the common obscure problems with IIS. I plan to add more information as I get it. Readers are welcome to add and share their experiences as well.