Подтвердить что ты не робот

При программном создании нового веб-сайта 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 \"

</обновление >

Если я знаю имя пула приложений, в котором я хотел бы разместить этот веб-сайт, как его найти и добавить на него этот сайт?

4b9b3361

Ответ 1

Вы должны назначить 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"

Ответ 2

Вам нужно получить AppPoolfrom IIS://{0}/W3SVC/AppPools и прикрепить его к site AppPoolId. Что-то вроде:

 var appPool = new DirectoryEntry(
     string.Format("IIS://{0}/W3SVC/AppPools/{1}", webServer, appPoolName)
 );
 site.Properties["AppPoolId"].Value = appPool;

Ответ 3

site.Properties [ "AppPoolId" ] [0] = "имя пула";