2010-11-19 12 views
6

Podczas tworzenia witryny w systemie VS2010/IIS 7.5 używam usługi Web Deploy w celu opublikowania witryny z mojego komputera na serwer witryny dla deweloperów.Internetowe wdrażanie usług IIS - tworzenie wirtualnych katalogów?

Witryna ma około 40 wirtualnych katalogów i chciałbym automagicznie tworzyć te na serwerze podczas wdrażania. Czy istnieje prosty sposób na zrobienie tego?

Rozważam napisanie małej aplikacji, która załadowałaby listę z pliku lub bazy danych i utworzyła je na żądanie. Katalogi mają różne ścieżki fizyczne na mojej maszynie programistycznej niż na serwerze sieciowym, co rzuca klucz do prac.

+0

40 wirtualnych katalogów? Więc masz 40 różnych aplikacji. Hmmm, to wydaje się dużo. Jakiego rodzaju strony rozwijasz? Znam małych dostawców hostingu, którzy mają mniej wirtualnych katalogów na swoim serwerze niż Ty :-) –

+0

Nie, to nie 40 różnych aplikacji. Stopniowo przenoszę OGROMNĄ (400k + linie kodu i ponad 100 000 stron) klasyczną aplikację ASP na .NET MVC. Foldery virt umożliwiają nowej witrynie dostęp do starej zawartości przy istniejących adresach URL. –

Odpowiedz

6

Jeśli używasz MSBuild do wdrożenia twojej strony internetowej, możesz napisać CustomBuildTask w .net, który możesz użyj, aby utworzyć swój katalog wirtualny.

Istnieje wiele środków, w jaki sposób tworzyć i konsumować niestandardowego zadania kompilacji, ale tutaj jest kod używam utworzyć katalog wirtualny przy użyciu niestandardowego zadania Budowa:

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

Dzięki za próbkę kodu. Miałem (oczywiście) nadzieję na coś, co byłoby nieco bardziej zautomatyzowane, ale to na pewno się uda. –

1

Nie zrobiłem żadnego niestandardowego programowania przeciwko WebDeploy, ale widziałem, że istnieje dla niego API. Nie mogę znaleźć oficjalnej dokumentacji na ten temat, ale być może ten blog + przykładowa aplikacja może dać początek: Web Deploy API Web Application

Powiązane problemy