C# 为什么根本不创建IIS应用程序池?

C# 为什么根本不创建IIS应用程序池?,c#,iis,servermanager,C#,Iis,Servermanager,下面有一些严重的错误,但我就是想不出是什么。 虽然网站是像一个魔咒一样创建的,但是应该与之关联的应用程序池根本没有创建 public string Create(string sitename) { try { using (ServerManager serverMgr = new ServerManager()) { stri

下面有一些严重的错误,但我就是想不出是什么。 虽然网站是像一个魔咒一样创建的,但是应该与之关联的应用程序池根本没有创建

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;
            }
        }

我做错了什么

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


这里发生的事情是,当您创建站点时,它会自动被分配到
DefaultAppPool

您需要做的是替换站点的根
应用程序
/
),并将其指向刚刚创建的应用程序池

最简单的方法是首先清除新站点的
应用程序
集合,然后添加指向应用程序池的新根应用程序

我将您的代码片段更改为以下内容:

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();

错误(消息:当前命令使用中不支持该标识符。您指定了“test.example.com”。有什么想法吗?您在运行appcmd命令行应用程序时遇到该错误吗?在这种情况下,我认为它在抱怨“test.example.com”作为您的应用程序池名称。我不知道应用程序池上的命名限制是什么,但我从未见过其中包含句点的。请尝试将您的应用程序池命名为更简单的测试名称,例如“myAppPool”而不是“test.example.com”绑定信息无效:80:something。您需要修复该问题。尝试“*:80:something”@LexLi谢谢,我是按照要求做的,但问题仍然存在。你的代码不仅仅是一个问题,而是很多问题。你必须找到一个合适的示例来开始。我同意@LexLi。这里提出的问题已经得到了回答。在评论中附加补充问题不符合网站的精神,你应该单独问这些问题,如果需要,请参考此问题。我很乐意提供帮助,但肯定不会在评论中提供帮助。这确实很有帮助,但我仍然无法理解为什么应用程序池设置为“ApplicationPoolIdentity”@OrElse
ApplicationPoolIdentity
是池将在其下执行请求的标识。在旧Windows 2003中,这将是
Network Service
ApplicationPoolIdentity
是在池运行时动态创建的合成标识。您永远不会在Windows用户管理器中看到它。问题关于
ApplicationPoolIdentity
,这将是一个完全不同的问题。到目前为止,我认为我的答案为您当前的问题提供了一个解决方案。