以编程方式更改应用程序的AppPool

3
我需要更改特定网站下所有/选定应用程序的应用程序池。 我已经获取了我的IIS上所有网站和应用程序池,但是我无法更改它们。 有什么想法吗?
到目前为止,我所做的就是... 这看起来很奇怪,因为只有字符串在改变,没有对象。
private void ChangeAppPool()
{
    Microsoft.Web.Administration.Site site = (Microsoft.Web.Administration.Site)this.websiteList.SelectedItem;
    Microsoft.Web.Administration.ApplicationPool appPool = (Microsoft.Web.Administration.ApplicationPool)this.appPoolCombo.SelectedItem;

    site.Stop();
    site.ApplicationDefaults.ApplicationPoolName = appPool.Name;

    foreach (var item in site.Applications)
    {
        item.ApplicationPoolName = appPool.Name;
    }

    site.Start();
    appPool.Recycle();
}
1个回答

9

我修改了您提供的代码,使用ServerManager,因为您的代码对我不起作用。(this.websiteList.SelectedItem是什么?将字符串强制转换为Site类型吗?)

ServerManager serverManager = new ServerManager();
Site site = serverManager.Sites[0]; // get site by Index or by siteName
ApplicationPool appPool = serverManager.ApplicationPools[1]; // get appPool by Index or by appPoolName

site.Stop();
site.ApplicationDefaults.ApplicationPoolName = appPool.Name;

foreach (var item in site.Applications)
{
    item.ApplicationPoolName = appPool.Name;
}

serverManager.CommitChanges();  // this one is crucial!!! see MSDN: 
// Updates made to configuration objects must be explicitly written to the configuration 
// system by using the CommitChanges method!!
site.Start();
appPool.Recycle();

selectedItem 是对象。通过组合框进行选择。感谢您的回答! - eestein

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接