2013-05-07 9 views
5

IISアプリケーションの作成を自動化しようとしていますが、これはライブラリMicrosoft.Web.Administrationを使用しています。ここで私が使用しているコードの一部です:Microsoft.Web.Administrationライブラリを使用してIISアプリケーションを作成すると、2つのアプリケーションが1つではなく2つ作成されます

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の下に適切なアプリケーションプールでアプリケーションを作成していますが、私はそこに2つのアプリケーションが表示されている新しく作成されたアプリケーションプールのメニューで "アプリケーションの表示"を選択しているとき、 eアプリケーションが1つだけでなければなりません。私は2つのアプリケーションの作成を避けるためにこれに取り組んでいますが、方法を見つけることはできません。ここではその例を示す画像れる:なぜ、上記のコードを実行した後、二つのアプリケーションが作成され、どのようにその問題を回避するためにコードを変更する:

enter image description here

だからここは私の質問ですか?

+2

GetSite&GetApplicationはどこで参照されていますか? – thestar

+0

public static Site GetSite(ServerManager serverManager、string siteName) { return serverManager.Sites.FirstOrDefault(x => x.Name == siteName); }プライベート静的アプリケーションGetApplication( ServerManagerのServerManagerの、 ストリングサイト名、 ストリングのapplicationName) {戻りserverManager.Sites .FirstOrDefault(X => x.Name ==サイト名の)?。アプリケーション .FirstOrDefault(X => x.Path == "/" + applicationName); } –

答えて

2

すべてのサイトには、2番目のアプリとして表示されている「ルートアプリケーション」が含まれている必要があります。基本的に上記のサイトに 'http://example.com/'(またはバインディングで設定したホスト名)をリクエストすると、ルートアプリケーションからリクエストされます。また、 'http://example.com/TestApp'を呼び出すときに/ TestAppが作成されます。サイトを作成し、物理パスを指定すると、内部的にルートアプリケーション「/」が作成されます。 これを見るには、%windir%\ system32 \ inetsrv \ applicationHost.configを開きます。

あなたが見ているものは正確ですが、実際には新しいアプリが必要ないかもしれません。ルートアプリケーションだけが必要ですか?本当に/ TestAppがURLに必要ですか?

関連する問題