IIS Web Deploy - crear directorios virtuales?
-
26-09-2019 - |
Pregunta
En el desarrollo de un sitio en VS2010 / IIS 7.5, estoy usando Web Deploy para publicar el sitio de mi máquina al servidor del sitio prog.
El sitio tiene alrededor de 40 directorios virtuales, y me gustaría crear automagicamente los del servidor durante el despliegue. ¿Hay una manera simple de hacer esto?
Estoy pensando en escribir una pequeña aplicación que cargar la lista de un archivo o base de datos y les crear bajo demanda. Los directorios tienen diferentes rutas físicas en mi máquina de desarrollo que en el servidor web, también, lo que arroja una llave en las obras.
Solución
Si está utilizando MSBuild para tu web desplegará Puede escribir una CustomBuildTask en .NET que se puede utilizar para crear el directorio virtual.
Hay una gran cantidad de recursos sobre cómo crear y consumir una tarea de generación personalizada, pero aquí es el código que utilizo para crear un directorio virtual mediante una tarea de generación personalizada:
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();
}
Otros consejos
No he hecho ninguna programación personalizada contra WebDeploy, pero he visto referencia que existe una API para ello. Parece que no puedo encontrar documentación oficial sobre el mismo, pero quizás este blog + aplicación de ejemplo podría proporcionar un comienzo: Aplicación web web Implementar API