Déployez Web IIS - créer des répertoires virtuels?
-
26-09-2019 - |
Question
Lors de l'élaboration d'un site sur VS2010 / IIS 7.5, j'utilise Web Deploy pour publier le site de ma machine au serveur de site dev.
Le site a environ 40 répertoires virtuels, et je voudrais créer automagiquement ceux sur le serveur lors du déploiement. Est-il un moyen simple de le faire?
Je songe à écrire une petite application qui charge la liste à partir d'un fichier ou base de données et les créer sur demande. Les répertoires ont des chemins physiques sur ma machine de développement que sur le serveur Web, aussi, qui jette une clé dans les travaux.
La solution
Si vous utilisez MSBuild pour votre web Deploy, vous pouvez écrire un CustomBuildTask en .net que vous pouvez utiliser pour créer votre répertoire virtuel.
Il y a beaucoup de ressources sur la façon de créer et de consommer une tâche de construction personnalisée, mais voici le code que j'utilise pour créer un répertoire virtuel à l'aide d'une tâche de génération personnalisée:
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();
}
Autres conseils
Je l'ai ne se fait programmation personnalisée contre WebDeploy, mais je l'ai vu référence qu'il existe une API pour elle. Je ne peux pas sembler trouver la documentation officielle, mais peut-être ce blog + app échantillon pourrait fournir un début: Web Deploy API Web application