internal static Dictionary<string, string> GetVirtualDirectories(SageContext context)
{
Dictionary<string, string> virtualDirectories = new Dictionary<string, string>();
try
{
string serverRootPath = context.MapPath("/").ToLower().TrimEnd('\\');
using (DirectoryEntry iis = new DirectoryEntry("IIS://Localhost/w3svc"))
{
IEnumerable<DirectoryEntry> websites = iis.Children.Cast<DirectoryEntry>()
.Where(c => c.SchemaClassName == "IIsWebServer");
foreach (DirectoryEntry website in websites)
{
using (website)
{
DirectoryEntry root = website.Children.Find("Root", "IIsWebVirtualDir");
string sitePath = root.Properties["path"].Value.ToString().ToLower().TrimEnd('\\');
if (sitePath == serverRootPath)
{
virtualDirectories = Project.GetVirtualDirectories(root, string.Empty);
break;
}
}
}
}
}
catch (Exception ex)
{
log.ErrorFormat("Could not retrieve virtual directories in the current application's web server: {0}", ex.Message);
}
return virtualDirectories;
}