Как программно создать новый веб-сайт IIS, как я могу добавить его в существующий пул приложений?
Я успешно автоматизировал процесс создания нового веб-сайта IIS, однако написанный мной код не заботится о пулах приложений, он просто добавляется в DefaultAppPool. Однако я хотел бы добавить этот недавно созданный сайт в существующий пул приложений.
Вот код, который я использую для создания нового сайта.
var w3Svc = new DirectoryEntry(string.Format("IIS://{0}/w3svc", webserver));
var newsite = new object[] { serverComment, new object[] { serverBindings }, homeDirectory };
var websiteId = w3Svc.Invoke("CreateNewSite", newsite);
site.Invoke("Start", null);
site.CommitChanges();
< обновление>
Хотя это не имеет прямого отношения к вопросу, ниже приведены некоторые примеры значений. Это может помочь кому-то понять, что именно код выше делает проще.
- webServer: "localhost"
- serverComment: "testing.dev"
- serverBindings: ": 80: testing.dev"
- homeDirectory: "c: \ inetpub \ wwwroot \ testing \"
< / update>
Если я знаю название пула приложений, в котором я хотел бы разместить этот веб-сайт, как я могу найти его и добавить к нему этот сайт?
3 ответа
Вы должны назначить AppPool для виртуального каталога (не для веб-сервера) и установить для свойства AppIsolated значение 2, что означает пул-процесс;)
http://msdn.microsoft.com/en-us/library/ms525598%28v=VS.90%29.aspx
Соответствующий пример кода по ссылке:
static void AssignVDirToAppPool(string metabasePath, string appPoolName)
{
// metabasePath is of the form "IIS://<servername>/W3SVC/<siteID>/Root[/<vDir>]"
// for example "IIS://localhost/W3SVC/1/Root/MyVDir"
// appPoolName is of the form "<name>", for example, "MyAppPool"
Console.WriteLine("\nAssigning application {0} to the application pool named {1}:", metabasePath, appPoolName);
try
{
DirectoryEntry vDir = new DirectoryEntry(metabasePath);
string className = vDir.SchemaClassName.ToString();
if (className.EndsWith("VirtualDir"))
{
object[] param = { 0, appPoolName, true };
vDir.Invoke("AppCreate3", param);
vDir.Properties["AppIsolated"][0] = "2";
Console.WriteLine(" Done.");
}
else
Console.WriteLine(" Failed in AssignVDirToAppPool; only virtual directories can be assigned to application pools");
}
catch (Exception ex)
{
Console.WriteLine("Failed in AssignVDirToAppPool with the following exception: \n{0}", ex.Message);
}
}
Обратите внимание, что если вы явно не добавляете новый виртуальный каталог в приложение, metabasePath
будет простоIIS://<servername>/W3SVC/<siteID>/Root
"
Вам нужно получить AppPoolfrom IIS://{0}/W3SVC/AppPools
и прикрепить его к site
"s AppPoolId
, Что-то вроде:
var appPool = new DirectoryEntry(
string.Format("IIS://{0}/W3SVC/AppPools/{1}", webServer, appPoolName)
);
site.Properties["AppPoolId"].Value = appPool;