简体   繁体   中英

Cannot progammatically change IIS website's physical path

I'm trying to change the path to some of my IIS sites programmatically. The change only takes effect only for one of the sites (the same one) and not all of them. Can anyone see what I am doing wrong here?

using WebAdministration = Microsoft.Web.Administration;

using (WebAdministration.ServerManager serverManager = new WebAdministration.ServerManager())
{
    serverManager.Sites.ToList().ForEach(site =>
    {
        site.Stop();
        serverManager.CommitChanges();
        //ChangeDirectoryOfSite(site
        site.Applications.ToList().ForEach(app =>
        {
            //ChangeDirectoryOfApplication
            //if (app.VirtualDirectories?.Attributes["path"]?.Value...
            app.VirtualDirectories.Attributes["path"].Value = ...
            //if (app.VirtualDirectories?.Attributes["physicalPath"]?.Value?
            app.VirtualDirectories.Attributes["physicalPath"].Value = ...
            app.VirtualDirectories.ToList().ForEach(virtualDir =>
            {
                //ChangeDirectoryOfVirtualDirectoy
                //if (virtualDir.Attributes["path"].Value...
                virtualDir.Attributes["path"].Value = ...
                //if (virtualDir.Attributes["physicalPath"].Value...
                virtualDir.Attributes["physicalPath"].Value = ...
            }
            site.Start()
        }
        serverManager.CommitChanges();
    }
}

The answer was to .CommitChanges() after each value change:

I marked the code changes with // <-- Add this below

using WebAdministration = Microsoft.Web.Administration;

using (WebAdministration.ServerManager serverManager = new WebAdministration.ServerManager())
{
    serverManager.Sites.ToList().ForEach(site =>
    {
        site.Stop();
        serverManager.CommitChanges();
        //ChangeDirectoryOfSite(site
        site.Applications.ToList().ForEach(app =>
        {
            //ChangeDirectoryOfApplication
            //if (app.VirtualDirectories?.Attributes["path"]?.Value...
            app.VirtualDirectories.Attributes["path"].Value = ...
            serverManager.CommitChanges(); // <--- Add this
            //if (app.VirtualDirectories?.Attributes["physicalPath"]?.Value?
            app.VirtualDirectories.Attributes["physicalPath"].Value = ...
            serverManager.CommitChanges(); // <--- Add this
            app.VirtualDirectories.ToList().ForEach(virtualDir =>
            {
                //ChangeDirectoryOfVirtualDirectoy
                //if (virtualDir.Attributes["path"].Value...
                virtualDir.Attributes["path"].Value = ...
                serverManager.CommitChanges(); // <--- Add this
                //if (virtualDir.Attributes["physicalPath"].Value...
                virtualDir.Attributes["physicalPath"].Value = ...
                serverManager.CommitChanges(); // <--- Add this                
            }
            site.Start()
        }
        serverManager.CommitChanges();
    }
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM