Tracing Failed IIS Requests
Today, after some frustrating debugging IIS and rewrite rules not matching what was expected, I learned that IIS can log out the match process and give a break to someone trying to psychically debug a reverse proxy situation.
Here's how I did it in code.
using Microsoft.Web.Administration;
...
using (ServerManager serverManager = new ServerManager())
{
Configuration config = serverManager.GetApplicationHostConfiguration();
ConfigurationSection traceFailedRequestsSection = config.GetSection("system.webServer/tracing/traceFailedRequests");
ConfigurationElementCollection traceFailedRequestsCollection = traceFailedRequestsSection.GetCollection();
if (traceFailedRequestsCollection.Count == 0)
{
ConfigurationElement addElement = traceFailedRequestsCollection.CreateElement("add");
addElement["path"] = @"*";
ConfigurationElementCollection traceAreasCollection = addElement.GetCollection("traceAreas");
ConfigurationElement addElement1 = traceAreasCollection.CreateElement("add");
addElement1["provider"] = @"WWW Server";
addElement1["areas"] = @"Rewrite";
addElement1["verbosity"] = @"Verbose";
traceAreasCollection.Add(addElement1);
ConfigurationElement failureDefinitionsElement = addElement.GetChildElement("failureDefinitions");
failureDefinitionsElement["statusCodes"] = @"200-399";
traceFailedRequestsCollection.Add(addElement);
serverManager.CommitChanges();
}
}