Создание виртуального каталога IIS с использованием C # на конкретном веб-сайте - PullRequest
1 голос
/ 20 ноября 2011
  public void CreateVirtualDirectory(string nameDirectory, string realPath)
        {
            System.DirectoryServices.DirectoryEntry oDE;
            System.DirectoryServices.DirectoryEntries oDC;
            System.DirectoryServices.DirectoryEntry oVirDir;
            try
            {

                oDE = new DirectoryEntry("IIS://" + this._serverName + "/W3SVC/1/Root");

                //Get Default Web Site
                oDC = oDE.Children;

                //Add row
                oVirDir = oDC.Add(nameDirectory, oDE.SchemaClassName.ToString());

                //Commit changes for Schema class File
                oVirDir.CommitChanges();

                //Create physical path if it does not exists
                if (!Directory.Exists(realPath))
                {
                    Directory.CreateDirectory(realPath);
                }

                //Set virtual directory to physical path
                oVirDir.Properties["Path"].Value = realPath;

                //Set read access
                oVirDir.Properties["AccessRead"][0] = true;

                //Create Application for IIS Application (as for ASP.NET)

                oVirDir.Invoke("AppCreate", true);
                oVirDir.Properties["AppFriendlyName"][0] = nameDirectory;


                //Save all the changes
                oVirDir.CommitChanges();
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

Эта функция работает нормально _serverName = "localhost", но всегда создает виртуальный каталог на Веб-сайте по умолчанию в IIS.В то время как у меня есть другой образец сайта, созданный с именем MySite на localhost: 8080.поэтому, когда я ставлю _serverName = "localhost:8080", это дает мне ошибку.

Ответы [ 2 ]

4 голосов
/ 20 ноября 2011

Эта строка:

oDE = new DirectoryEntry("IIS://" + this._serverName + "/W3SVC/1/Root");

Всегда принимает веб-сайт по умолчанию.«1» - это идентификатор сайта.Замените «1» идентификатором сайта, в котором вы хотите создать виртуальный каталог. Идентификатор сайта можно найти в IIS здесь:

enter image description here

Вы можете, еслипо вашему желанию перечислите все сайты программно, используя службы каталогов, чтобы помочь вам найти правильный идентификатор:

DirectoryEntry w3svc = new DirectoryEntry("IIS://" + this._serverName + "/w3svc");

foreach(DirectoryEntry de in w3svc.Children)
{
   if(de.SchemaClassName == "IIsWebServer")
   {
       var id = de.Name; //Name is the ID
       var displayName = de.Properties["ServerComment"].Value.ToString();
   }          
}
1 голос
/ 20 ноября 2011

Каждый веб-сайт имеет свой собственный идентификатор - LDAP-адрес «MySite», вероятно, выглядит примерно так:

IIS://" + this._serverName + "/W3SVC/**2**/Root
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...