2010-03-12 13 views
12

He automatizado con éxito el proceso de creación de un nuevo sitio web de IIS; sin embargo, el código que he escrito no se preocupa por los grupos de aplicaciones, simplemente se agrega a DefaultAppPool. Sin embargo, me gustaría agregar este sitio recién creado a un grupo de aplicaciones existente.Al programar de manera programada un nuevo sitio web de IIS, ¿cómo puedo agregarlo a un grupo de aplicaciones existente?

Aquí está el código que estoy usando para crear el nuevo sitio web.

 var w3Svc = new DirectoryEntry(string.Format("IIS://{0}/w3svc", webserver)); 
     var newsite = new object[] { serverComment, new object[] { serverBindings }, homeDirectory }; 
     var websiteId = w3Svc.Invoke("CreateNewSite", newsite); 
     site.Invoke("Start", null); 
     site.CommitChanges(); 

< actualización>

Aunque esto no está directamente relacionada con la pregunta, aquí hay algunos valores de muestra se utilizan anteriormente. Esto podría ayudar a alguien a entender exactamente lo que el código anterior está haciendo más fácilmente.

  • webServer: "localhost"
  • ServerComment: "testing.dev"
  • ServerBindings: ": 80: testing.dev"
  • sea homeDirectory: "c: \ inetpub \ wwwroot \ prueba \"

< /actualización>

Si k ahora el nombre del grupo de aplicaciones en el que me gustaría que esté este sitio web, ¿cómo puedo encontrarlo y agregarle este sitio?

Respuesta

6

Tiene que asignar el AppPool en el directorio virtual (no el servidor web) y establezca la propiedad AppIsolated a 2, que significa agrupada proceso;)

http://msdn.microsoft.com/en-us/library/ms525598%28v=VS.90%29.aspx

código en cuestión muestra de enlace:

static void AssignVDirToAppPool(string metabasePath, string appPoolName) 
{ 
    // metabasePath is of the form "IIS://<servername>/W3SVC/<siteID>/Root[/<vDir>]" 
    // for example "IIS://localhost/W3SVC/1/Root/MyVDir" 
    // appPoolName is of the form "<name>", for example, "MyAppPool" 
    Console.WriteLine("\nAssigning application {0} to the application pool named {1}:", metabasePath, appPoolName); 

    try 
    { 
    DirectoryEntry vDir = new DirectoryEntry(metabasePath); 
    string className = vDir.SchemaClassName.ToString(); 
    if (className.EndsWith("VirtualDir")) 
    { 
     object[] param = { 0, appPoolName, true }; 
     vDir.Invoke("AppCreate3", param); 
     vDir.Properties["AppIsolated"][0] = "2"; 
     Console.WriteLine(" Done."); 
    } 
    else 
     Console.WriteLine(" Failed in AssignVDirToAppPool; only virtual directories can be assigned to application pools"); 
    } 
    catch (Exception ex) 
    { 
    Console.WriteLine("Failed in AssignVDirToAppPool with the following exception: \n{0}", ex.Message); 
    } 
} 

Tenga en cuenta que si no va a agregar explícitamente un nuevo directorio virtual de la aplicación, el metabasePath se šī mply be "IIS://<servername>/W3SVC/<siteID>/Root"

+1

Gracias por el enlace. He intentado este enfoque, pero cuando leí su respuesta me di cuenta de que nunca estaba enviando el metabasePath correcto (al directorio virtual raíz para la aplicación). Todo está bien ahora. Gracias de nuevo. –

+0

Np. En realidad, la lógica de IIS se basa en directorios virtuales. Casi todo el uso del "sitio web" debe realizarse en el directorio virtual Root (IISVirtualDir) y no en el servidor web (IISWebServer). Si puede intentar usar WMI (se requiere DCOM) en lugar de ADSI. Es más flexible (especialmente sobre permisos). En IIS 7, finalmente tenemos Microsoft.Web.Administration;) – JoeBilly

0

que necesita para obtener la AppPoolfrom IIS://{0}/W3SVC/AppPools, y adjuntarlo a la site 's AppPoolId. Algo así como:

var appPool = new DirectoryEntry(
    string.Format("IIS://{0}/W3SVC/AppPools/{1}", webServer, appPoolName) 
); 
site.Properties["AppPoolId"].Value = appPool; 
+0

Una cosa que estaba buscando era una propiedad "AppPoolId" en appPool, pero no parece ser una. ¿Puedes arrojar algo de luz sobre por qué estamos asignando la appPool (tipo DirectoryEntry) directamente al valor de AppPoolId? –

+0

@Ian - En realidad, podría ser incorrecto allí. Puede que solo necesites asignar la appPoolName (la cadena) a AppPoolId. –

+0

Hm, bueno, eso no significa un error, pero el sitio web todavía está en el grupo de aplicaciones predeterminado. Me pregunto si es necesario establecer algo más además del AppPoolId. –

0

site.Properties ["AppPoolId"] [0] = "nombre de grupo";

Cuestiones relacionadas