簡體   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