2013-05-07 3 views
5

Ich versuche, die Erstellung von IIS-Anwendungen zu automatisieren und dafür verwende ich Microsoft.Web.Administration Bibliothek. Hier ist ein Teil des Codes Ich verwende:IIS-Anwendungserstellung mithilfe von Microsoft.Web.Administration-Bibliothek erstellt zwei Anwendung statt einer

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

Und hier ist Hauptcode, die Methoden von oben erwähnten IISHelper Klasse nennt

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

Nach der Ausführung dieses Code Ich erhalte erfolgreich erstellte Anwendung mit der Site und dem entsprechenden Anwendungspool unter dem IIS, aber wenn ich "View Application" im Menü des neu erstellten Anwendungspools auswähle, sehe ich dort zwei Anwendungen, aber ich bin sur e es muss nur eine Bewerbung sein. Ich arbeite daran, zwei Anwendungserstellung zu vermeiden, kann aber keinen Weg finden. Hier ist ein Bild zeigt, dass:

enter image description here

So, hier ist meine Frage: Warum werden nach dem obigen Code genannten Ausführung zwei Anwendungen erstellt werden und wie Sie den Code ändern, um dieses Problem zu vermeiden?

+2

Wo werden GetSite & GetApplication referenziert? – thestar

+0

öffentliche statische Site GetSite (ServerManager ServerManager, Zeichenfolge SiteName) { Rückgabe serverManager.Sites.FirstOrDefault (x => x.Name == SiteName); } private static Anwendung GetApplication ( Servermanager Servermanager, String sitename, String application) { return serverManager.Sites .FirstOrDefault (x => x.Name == sitename) ?. Anwendungen .FirstOrDefault (x => x.Pfad == "/" + Anwendungsname); } –

Antwort

2

Jede Site muss eine "Root Application" enthalten, die Sie als zweite App sehen. Wenn Sie Ihre Website oben als 'http://example.com/' (oder den Hostnamen, den Sie in den Bindungen festlegen) anfordern, werden Sie von dieser Root-App zusätzlich aufgefordert,/TestApp zu erstellen, das beim Aufruf von 'http://example.com/TestApp' angefordert wird. Wenn Sie die Site erstellen und den physischen Pfad angeben, erstellt sie intern eine Root-App "/". Um dies zu sehen, können Sie% windir% \ system32 \ inetsrv \ applicationHost.config öffnen.

Also technisch gesehen, was Sie sehen, ist richtig, aber Sie wollen vielleicht nicht wirklich eine neue App? und brauchen nur die root app? Brauchen Sie wirklich/TestApp in der URL zu sein?

Verwandte Themen