[Todays post comes to us courtesy of Wayne Gordon McIntyre, Gagan Mehra, and Sabir Chandwale from Commercial Technical Support]
Content Updated on 5/20/2011 to include steps for SBS 2011 Standard
Every so often we come across a support case where a customer has a need for a 32 bit web application to run on the SBS 2008/2011 server. This need usually arises due to a third party website or application that only has a 32 bit Module or ISAPI filter that needs to run on the site. This blog will discuss the steps needed to be able to successfully configure a web site or web application to run under a 32 bit application pool.
In this sample case, I have created a web site called test, running under an application pool that is also called test. This application pool is configured to enable 32-Bit applications which you can see under the advanced settings of the Application pool.
Generally, this is where the support case comes in, as when the customer tries to browse their website it fails with either a 503 service unavailable error or a 500.19 error. In this case we got a 503 service unavailable error first which basically means the app pool has crashed/shutdown.
This will also normally be accompanied by IIS-W3SVC Event 2280 in the application event log similar to the following.
To get past this error we need to edit the Native modules in the applicationhost.config by defining a preCondition bitness parameter for the RpcProxy native module. Native modules are registered and un-registered at the web server level under the <globalModules> section.
Before we make any modifications to the applicationhost.config, take a backup of your current IIS configuration:
- Launch an Administrative cmd prompt.
- Changed the directory path to C:\Windows\System32\Inetsrv\
- Type "Appcmd.exe add backup NameofBackup"
Once we have a successful backup we can go ahead and modify the applicationhost.config file to add the bitness precondition:
- From within the same administrative cmd prompt change the path to C:\Windows\System32\inetsrv\config\
- Type "notepad applicationhost.config" which will launch notepad and open the applicationhost.config file
- Locate the <globalModules> section.
- Modify the PasswordExpiryModule to have a bitness precondition so it looks as follows
<add name="PasswordExpiryModule" image="C:\Windows\system32\RpcProxy\RpcProxy.dll" preCondition="bitness64" />
** Note that preCondition is case sensitive the "C" must be capitalized.
Important: SBS 2011 standard will also include entries for kerbauth and exppw listed under <globalModules>. These modules belong to Exchange and are also 64 bit. If you are performing this task on SBS 2011 you will have to add the preCondition for bitness64 to these two modules as well:
- Save and close the applicationhost.config.
At this point if you attempt to browse your 32-Bit web site you will now see the other error which is the 500.19 error mentioned earlier.
To correct this error we now need to delete both the DynamicCompressionModule and the StaticCompressionModule from your 32-Bit website/application. To do this perform the following steps:
- Launch an Administrative cmd prompt.
- Change the directory path to c:\windows\system32\inetsrv\
- Type Appcmd.exe delete module dynamiccompressionmodule /site.name:yourWebsiteName
**Replace yourWebsiteName with the actual name of your site. In this example the name is test.
Do the same for the staticcompression module, Appcmd.exe delete module staticcompressionmodule /site.name:yourWebsiteName
** In this example we are using a basic web site, however in most cases, you will probably be using a web application. Modify the command to have /app.name:yourAppName rather than /site.name:yourWebsiteName if you are using a web application.
After completing these steps you should now be able to browse your 32-Bit web application/site
Configuring Native modules:
HTTP Status Codes in IIS 7.0
Great blog on IIS 7 preConditions