I'm currently playing around with the Microsoft.Web.Administration (MWA) namespace in order to adjust our application to configure IIS 7.5 with the new API. I understood that all IIS level changes should be expressed in the following file (I'm on Win2K8-R2):
%WINDIR%\System32\inetsrv\config\applicationHost.config
So, when I use the ServerManager
object to commit the configuration changes the file should be updated accordingly.
After adding a new MIME type (programmatic with MWA) I did not see any changes in the applicationHost.config file
, but I do see the new MIME type in the IIS manager window and IIS recognizes this MIME type without problems. Even after restating the OS - The config file does not contain the newly added MIME type, but the IIS manager window does list it.
Because my application pools are forced to 32-bit (Enable32BitAppOnWin64 = true
), I thought that the related config file should be located under %WINDIR%\SysWOW64\inetsrv\Config
, but (if it exists...) - it also does not change after the code commits the updates.
Can someone please explain this? Am I missing something (looking at the wrong file maybe?)? Can someone please shed some light on the SysWOW64\inetsrv\config
directory?
This is my code for adding the MIME type:
ServerManager manager = new ServerManager(); ConfigurationElementCollection staticContentCollection = manager .GetApplicationHostConfiguration() .GetSection("system.webServer/staticContent") .GetCollection(); //MIMETypes is a string[] array, each object is {FileExt},{MIMETypeStr} foreach (string pair in MIMETypes) { string[] mimeProps = pair.Split(','); ConfigurationElement mimeTypeEl = staticContentCollection .Where(a => (string)a.Attributes["fileExtension"].Value == mimeProps[0]) .FirstOrDefault(); if (mimeTypeEl != null) { staticContentCollection.Remove(mimeTypeEl); } ConfigurationElement mimeMapElement = staticContentCollection.CreateElement("mimeMap"); mimeMapElement["fileExtension"] = mimeProps[0]; mimeMapElement["mimeType"] = mimeProps[1]; staticContentCollection.Add(mimeMapElement); } manager.CommitChanges(); //At this point all is working but the config file does not reflect the change
The configuration files for IIS 7 and later are located in your %WinDir%\System32\Inetsrv\Config folder, and the primary configuration files are: ApplicationHost. config - This configuration file stores the settings for all your Web sites and applications.
The location of the file is currently in the %windir%\system32\inetsrv\config directory.
I just tried your code and it works fine. You are aware that this mime type is being added to the global mime type collection and not to a site?
It also gets added to the end of the <staticContent>
list, this list isn't re-sorted when you do ServerManager.CommitChanges()
.
Also on Windows 2008-R2 the correct location for applicationHost.config
is at:
C:\Windows\System32\inetsrv\config
I'm guess you're either using notepad.exe or NotePad2 to open this file (32 bit editors can't open it). Notepad won't reload the file upon a change and NotePad2 needs to be told to display a file change notification (alt-F5), out of the box it won't.
Also try adding something unusual like .xxx
, run your update then open the config file and do a search. I guarantee it'll be there.
Update:
Further to your comments below, I'm not sure how you're able to open applicationHost.config
using NotePad++ or any 32-bit editor, I certainly can't. Can you download NotePad2 which is a 64-bit editor:
http://www.flos-freeware.ch/notepad2.html
The release candidate works just fine.
On a default install of any 64 bit Windows 2008 or Windows 7 there shouldn't be an applicationHost.config
in the C:\Windows\SysWOW64\inetsrv\Config
folder. I'm not sure why you'd be seeing one there.
As a workaround to open and edit the 64-bit IIS configuration files with your favorite 32-bit editor that is 64-bit compatible (i.e. Notepad++), you can create a Windows directory symbolic link which points to C:\Windows\System32\inetsrv\Config
. With this method, you are replacing the 32-bit Config
directory, located at C:\Windows\SysWOW64\inetsrv\Config
to point to the 64-bit version. If, for example, you have an application which requires both 32-bit and 64-bit versions, this method won't work.
For more information, I strongly encourage you to visit this MSDN Blog.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With