【问题标题】:Why the IIS application pool is not created at all?为什么根本不创建 IIS 应用程序池?
【发布时间】:2016-04-30 09:43:18
【问题描述】:

下面有一些严重错误,但我无法弄清楚是什么。 虽然网站创建得像一个魅力,但应该与之关联的应用程序池根本没有创建。

public string Create(string sitename)
        {
            try
            {
                using (ServerManager serverMgr = new ServerManager())
                {
                    string strhostname = sitename + "." + domain;
                    string bindinginfo = ":80:" + strhostname;

                    if (!IsWebsiteExists(serverMgr.Sites, strhostname))
                    {
                        Site mySite = serverMgr.Sites.Add(strhostname, "http", bindinginfo, "C:\\admin\\" + domain);

                        ApplicationPool newPool = serverMgr.ApplicationPools.Add(strhostname);
                        newPool.ManagedRuntimeVersion = "v4.0";
                        newPool.ManagedPipelineMode = ManagedPipelineMode.Integrated;

                        serverMgr.CommitChanges();
                        return "Website  " + strhostname + " added sucessfully";
                    }

                    else
                    {
                        return "Name should be unique, " + strhostname + " already exists.";
                    }
                }
            }
            catch (Exception ex)
            {
                return ex.Message;
            }
        }

我在这里做错了什么?

【问题讨论】:

  • 绑定信息无效“:80:something”。你需要解决这个问题。试试“*:80:something”。
  • @LexLi 谢谢,我按要求做了,但问题仍然存在
  • 您的代码不只是一个问题,而是很多问题。您必须找到合适的样本才能开始。
  • 我同意@LexLi。这里提出的问题已经得到解答。在 cmets 中添加补充问题不符合本网站的精神,您应该单独提出这些问题,如果需要,请参考此问题。我很乐意提供帮助,但肯定不会在 cmets 中提供帮助。

标签: c# iis servermanager


【解决方案1】:

这里发生的情况是,当您创建网站时,它会自动分配给DefaultAppPool

您需要做的是替换您网站的 root Application (/) 并将其指向您刚刚创建的应用程序池。

执行此操作的最简单方法是首先清除新站点的 Application 集合,然后添加一个新的 root 应用程序,该应用程序指向您的应用程序池。

将您的代码 sn-p 我更改为以下内容:

Site mySite = serverMgr.Sites.Add(strhostname, "http", bindinginfo, "C:\\admin\\" + domain);

// Clear Applications collection
mySite.Applications.Clear();

ApplicationPool newPool = serverMgr.ApplicationPools.Add(strhostname);
newPool.ManagedRuntimeVersion = "v4.0";
newPool.ManagedPipelineMode = ManagedPipelineMode.Integrated;

// Create new root app and specify new application pool
Application app = mySite.Applications.Add("/", "C:\\admin\\" + domain);
app.ApplicationPoolName = strhostname;

serverMgr.CommitChanges();

【讨论】:

  • 这真的很有帮助,但我仍然无法理解为什么应用程序池设置为“ApplicationPoolIdentity”
  • @OrElse ApplicationPoolIdentity 是池将在其下执行请求的标识。在 Windows 2003 的旧时代,这将是 Network ServiceApplicationPoolIdentity 是在您的池运行时动态创建的合成身份。您永远不会在 Windows 用户管理器中看到它。关于ApplicationPoolIdentity 的问题将是完全不同的事情。到目前为止,我认为我的回答为您当前的问题提供了解决方案。
【解决方案2】:

我不希望应用程序池名称中包含标点符号。将域添加为应用程序池名称的一部分有点不寻常 - 也许这就是来源。此处讨论了基本方法以及appcmd 语法,以使相同的事情发生在命令行上 - 尝试在 cmd 行上创建应用程序池以查看您的参数是否可以接受。

Create an application pool that uses .NET 4.0

【讨论】:

  • 错误(消息:当前命令使用不支持标识符。您指定了“test.example.com”。有什么想法吗?
  • 您在运行 appcmd 命令行应用程序时是否遇到该错误?在这种情况下,我认为它抱怨“test.example.com”作为您的应用程序池名称。我不确切知道应用程序池的命名限制是什么,但我从未见过其中有句点的。尝试将您的应用程序池命名为更简单的测试,例如“myAppPool”而不是“test.example.com”
猜你喜欢
  • 2014-09-29
  • 2011-04-21
  • 1970-01-01
  • 2010-09-20
  • 1970-01-01
  • 2012-10-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多