2010-11-19 4 views
6

При разработке сайта на VS2010/IIS 7.5 я использую Web Deploy для публикации сайта с моей машины на сервере dev-сервера.Развертывание веб-служб IIS - создание виртуальных каталогов?

На сайте имеется около 40 виртуальных каталогов, и я хотел бы автоматически создавать их на сервере во время развертывания. Есть ли простой способ сделать это?

Я подумываю написать небольшое приложение, которое будет загружать список из файла или базы данных и создавать их по требованию. Каталоги имеют разные физические пути на моей машине разработки, чем на веб-сервере, а также, что бросает ключ в работу.

+0

40 виртуальных каталогов? Таким образом, у вас есть 40 различных приложений. Хммм, похоже, много. Какой сайт вы разрабатываете? Я знаю мелких хостинг-провайдеров, у которых на своем сервере меньше виртуальных каталогов, чем у вас :-) –

+0

Нет, это не 40 различных приложений. Я постепенно перемещаю HUGE (400k + строки кода и более 100 000 страниц) классическое приложение ASP для .NET MVC. Пары virt позволяют новому сайту получать доступ к старому содержимому по существующим URL-адресам. –

ответ

6

Если вы используете MSBuild для развертывания в Интернете, вы можете написать CustomBuildTask в .net, который вы можете используйте для создания своего виртуального каталога.

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

public void CreateVirtualDirectory() 
{ 

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


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

    //Add row to schema 
    DirectoryEntry oVirDir = oDC.Add(this._strVDirName, 
       oDE.SchemaClassName.ToString()); 

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


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

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

    //Set the default docs 
    oVirDir.Properties["EnableDefaultDoc"][0] = true; 
    oVirDir.Properties["DefaultDoc"][0] = "default.aspx"; 

    //set the name 
    oVirDir.Properties["AppFriendlyName"][0] = this._strVDirName; 

    //do it 
    oVirDir.Invoke("AppCreate", true); 


    //set the application pool 
    if (!string.IsNullOrEmpty(_strApplicationPool)) 
    { 
     object[] param = { 0, _strApplicationPool, true }; 
     oVirDir.Invoke("AppCreate3", param); 
     oVirDir.Properties["AppIsolated"][0] = "2"; 
    } 

    //Save all the changes 
    oVirDir.CommitChanges(); 
} 
+0

Спасибо за образец кода. Я (конечно) надеялся на что-то, что было бы немного автоматизировано, но это, безусловно, выполнит свою работу. –

1

Я не сделал никакого специального программирования против WebDeploy, но я видел ссылку, что для него есть API. Я не могу найти официальную документацию, но, возможно, это приложение для блога + образец может обеспечить начало: Web Deploy API Web Application