2010-11-19 22 views
6

Al desarrollar un sitio en VS2010/IIS 7.5, estoy usando Web Deploy para publicar el sitio desde mi máquina al servidor del sitio de desarrollo.Implementación web de IIS: ¿crear directorios virtuales?

El sitio tiene aproximadamente 40 directorios virtuales, y me gustaría crear automágicamente aquellos en el servidor durante la implementación. ¿Hay una manera simple de hacer esto?

Estoy pensando en escribir una pequeña aplicación que cargue la lista desde un archivo o base de datos y crearlos a pedido. Los directorios tienen diferentes rutas físicas en mi máquina de desarrollo que en el servidor web, lo que también crea problemas.

+0

40 directorios virtuales? Entonces tienes 40 aplicaciones diferentes. Hmmm, eso parece mucho. ¿Qué tipo de sitio estás desarrollando? Conozco proveedores de alojamiento pequeños que tienen menos directorios virtuales en su servidor que usted :-) –

+0

No, no son 40 aplicaciones diferentes. Estoy migrando gradualmente una aplicación ASP clásica ENORME (400k + líneas de código y más de 100,000 páginas) a .NET MVC. Las carpetas virt permiten que el nuevo sitio acceda al contenido antiguo en las URL existentes. –

Respuesta

6

Si está utilizando MSBuild para su implementación web, puede escribir un CustomBuildTask en .net que pueda utilizar para crear su directorio virtual.

Hay una gran cantidad de recursos sobre cómo crear y utilizar 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(); 
} 
+0

Gracias por el ejemplo de código. Estaba (por supuesto) esperando algo que fuera un poco más automatizado, pero esto ciertamente hará el trabajo. –

1

No he hecho ninguna programación personalizada contra WebDeploy, pero he visto referencias de que hay una API para ello. Parece que no puedo encontrar documentación oficial, pero quizás esta aplicación de blog + ejemplo podría proporcionar un inicio: Web Deploy API Web Application

Cuestiones relacionadas