We had a problem with WCF hosting on service in Windows 2003.
We found a command line tool (httpcfg) which helped us to resolve the issue temporarily.
The following command line argument needs to run after the service installation:
httpcfg set urlacl -u http://+:8080/ -a "D:(A;;GX;;;S-1-5-21-490459244-4280451753-3120260354-1829)"
We need to pass this argument via installer using C#
That is via service controller after installer event. How would I do the same in C# using ServiceController?
I can think of two approaches:
httpcfg.exeusingSystem.Diagnostics.ProcessHttpSetServiceConfigurationThe second approach is a little messy but not that hard. The PInvoke.net page describes the call and even gives a working example:
EDIT: Some notes about cleanup issues inspired by Rob’s comment. I put them here in this existing answer, because they don’t make a good one on their own.
Please note, that whatever approach you take (httpcfg.exe or direct use of the HTTP-API), make really sure that you unregister the URLs in your uninstall process.
The reason is, that HTTP.SYS (which actually is a kernel component) has only so much (nonpaged) memory available for managing URL reservations. If you exceed this, by having to many (possibly stale / left-over) registrations, you get errors and cannot register any new URLs (see http://support.microsoft.com/kb/824033).
While this is “solvable” by manually using httpcfg.exe to cleanup registrations you think(!) are orphaned (or allowing more memory – careful!) it is a royal pain and totally unnecessary, if uninstallers work as suggested.