HOWTO: Diagnose one cause of 503 Service Unavailable on IIS6 on 64bit Windows

Strange. I have answered this question recently on how to diagnose a common cause of "503 Service Unavailable" on IIS6 in 64bit Windows (in particular, Windows XP 64bit Edition and Windows Server 2003 SP1 64bit Editions), but the "search" facilities from the blog do not find them at all. Seems like simple keyword search is busted in Community Server - I still think that pointing search engines like MSN Search or Google on the blogs.msdn.com site is more effective. But I digress... let's get back to the question at hand...

Question:

I was doing some test. one of them was to uninstall the IIS and reinstall it , it works fine, i register the VS2003 Beta 2 and the IIS continue working but when reinstalling the Front Page Server Extension 2002 for XP64 and it stop working, i get this message :

ISAPI Filter 'C:\Program Files (x86)\Common Files\Microsoft Shared\Web Server Extensions\50\bin\fpexedll.dll' could not be loaded due to a configuration problem. The current configuration only supports loading images built for a AMD64 processor architecture. The data field contains the error number. To learn more about this issue, including how to troubleshooting this kind of processor architecture mismatch error, see https://go.microsoft.com/fwlink/?LinkId=29349.

What about this.

Answer:

You definitely want to first browse this prior discussion of the issue: HOWTO: Diagnose one cause of 503 Service Unavailable on IIS6

Basically, this is what is happening to cause these 503s:

  1. On 64bit Windows, a given process like w3wp.exe can only load either 32bit DLLs or 64bit DLLs but not both types at the same time into the same process. Which can be loaded depends on the "bitness" (i.e. 32bit or 64bit) of the process.
  2. By default, IIS6 on 64bit Windows is configured to run 64bit w3wp.exe processes. In your default configuration, it means that you can only configure IIS6 to run 64bit ISAPI DLLs.
  3. If you configure IIS6 to run 32bit ISAPI DLLs in 64bit w3wp.exe, then it will simply fail and result in the event log entry you observed.
  4. The only way to fix this is to make sure you configure IIS6 to run ALL ISAPI DLLs with the same "bitness" as the bitness of the w3wp.exe that you configured IIS6 to launch.

Unfortunately, it is not possible for IIS6 to ensure that you configure it to run the same ISAPI DLLs nor that you launch w3wp.exe of the same bitness, and since Windows 64bit has a WOW64 mode to support installing/running 32bit applications, it pretty much means that nothing stops you from installing 99.999% of existing MSI installers of 32bit ISAPI DLLs onto IIS6 on 64bit Windows and instantly break the server.

Quite frankly, you simply have to know what you are doing on 64bit Windows or else you will easily break IIS6.

Most existing installers of 32bit ISAPI DLLs will simply succeed in configuring 64bit IIS6 in a broken state. And no, this problem is not solvable by installers, either, because even if all installers in the world are rewritten to be aware of WOW64 on 64bit Windows, there is still a 50% chance it configures IIS6 in a broken state where you have conflicting requirements.

In this case, what happened is that you installed 32bit FPSE 2002 (which will blindly configure IIS6 to run 32bit ISAPI DLLs), but you still have IIS6 running in 64bit mode, so IIS will obviously fail with a 503. If you want to run 32bit FPSE2002, you must configure IIS6 to run in 32bit mode (see my other blog entry on how to do this).

BTW, there is no such thing as x64 binaries for FPSE 2002 - the only binaries available for FPSE2002 are:

  • FPSE2002 32bit in Windows Server 2003 - x86 binaries
  • FPSE2002 64bit for Itanium in Windows Server 2003 - IA64 binaries
  • FPSE2002 32bit Download and FPSE2002 for x64 - x86 binaries

In particular, there are no FPSE2002 64bit for AMD64 built in or downloadable, and before you ask, no, the FPSE team has already said they have no plans to make such a binary available. Thus, the only way to run FPSE 2002 on AMD64 is by configuring IIS6 to be in 32bit mode.

Visual Studio 2005, on the other hand, will install both 32bit and 64bit of .Net Framework and ASP.Net 2.0, so you just need to run aspnet_regiis.exe from either the 32bit Framework or 64bit Framework64 directory to toggle the bitness of ASP.Net as appropriate.

However, realize that if you ever need to load a 64bit DLL (such as .Net Framework 2.0 64bit) AND need FPSE2002 (which requires a 32bit DLL), that configuration will never work and there are no work-arounds. Your only option for FPSE 2002 on AMD64 is to run as 32bit - configure IIS6 to be in 32bit mode and configure ASP.Net with aspnet_regiis.exe from the 32bit Framework directory.

//David