繁体   English   中英

使用Microsoft.Web.Administration库创建IIS应用程序创建两个应用程序而不是一个

[英]IIS application creation by using Microsoft.Web.Administration library creates two application instead of one

我正在尝试自动创建IIS应用程序,为此我使用的是Microsoft.Web.Administration库。 这是我正在使用的代码的一部分:

IISHelper.cs

public static void CreateApplicationPool(string applicationPoolName)
{
    using (ServerManager serverManager = new ServerManager())
    {
        if (serverManager.ApplicationPools[applicationPoolName] != null)
            return;
        ApplicationPool newPool = serverManager.ApplicationPools.Add(applicationPoolName);
        newPool.ManagedRuntimeVersion = "v4.0";
        serverManager.CommitChanges();
    }
}

public static void CreateSite(string siteName, string path)
{
    using (ServerManager serverManager = new ServerManager())
    {
        var sites = serverManager.Sites;
        if (sites[siteName] == null)
        {
            sites.Add(siteName, "http", "*:80:", path);
            serverManager.CommitChanges();
        }
    }
}

public static void CreateApplication(string siteName, string applicationName, string path)
{
    using (ServerManager serverManager = new ServerManager())
    {
        var site = GetSite(serverManager, siteName);
        var applications = site.Applications;
        if (applications["/" + applicationName] == null)
        {
            applications.Add("/" + applicationName, path);
            serverManager.CommitChanges();
        }
    }
}

public static void CreateVirtualDirectory(string siteName, string applicationName, string virtualDirectoryName, string path)
{
    using (ServerManager serverManager = new ServerManager())
    {
        var application = GetApplication(serverManager, siteName, applicationName);
        application.VirtualDirectories.Add("/" + virtualDirectoryName, path);
        serverManager.CommitChanges();
    }
}

public static void SetApplicationApplicationPool(string siteName, string applicationPoolName)
{
    using (ServerManager serverManager = new ServerManager())
    {
        var site = GetSite(serverManager, siteName);
        if (site != null)
        {
            foreach (Application app in site.Applications)
            {
                app.ApplicationPoolName = applicationPoolName;
            }
        }                
        serverManager.CommitChanges();
    }
}

这里是主代码,它调用上面提到的IISHelper类的方法

string siteName = "TestSite";
string applicationName = "TestApp";
string virtualDirectoryName = "TestVirtualDirectory";
string applicationPoolName = "TestAppPool";
string physicalPath = @"C:\inetpub\mynewsite";

IISHelper.CreateApplicationPool(applicationPoolName);
IISHelper.CreateSite(siteName, physicalPath);
IISHelper.CreateApplication(siteName, applicationName, physicalPath);
IISHelper.CreateVirtualDirectory(siteName, applicationName, virtualDirectoryName, physicalPath);
IISHelper.SetApplicationApplicationPool(siteName, applicationPoolName); 

执行此代码后,我正在IIS下成功创建带有站点和相应应用程序池的应用程序,但是当我在新创建的应用程序池的菜单中选择“查看应用程序”时,我看到有两个应用程序,但是我确定必须只有一个申请。 我正在努力避免两个应用程序创建,但无法找到方法。 这是一张图片说明:

在此输入图像描述

所以这是我的问题:为什么在上面提到的代码执行之后创建了两个应用程序以及如何修改代码以避免这个问题?

每个站点都必须包含一个“根应用程序”,这是您所看到的第二个应用程序。 基本上,当您在上面请求您的网站为“ http://example.com/ ”(或您在绑定中设置的任何主机名)时,您将从该根应用程序请求,此外您正在创建/ TestApp,这将在致电' http://example.com/TestApp '。 当您创建站点并提供物理路径时,它会在内部为其创建根应用程序“/”。 要查看此信息,您可以打开%windir%\\ system32 \\ inetsrv \\ applicationHost.config。

从技术上讲,你所看到的是正确的,但你可能真的不想要一个新的应用程序? 并且只需要root应用程序? 你真的需要/ TestApp在URL中吗?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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