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:
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?
Wo werden GetSite & GetApplication referenziert? – thestar
ö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); } –