Reiniciar (reciclar) un grupo de aplicaciones

Resuelto asked hace 15 años • 11 respuestas

¿Cómo puedo reiniciar (reciclar) el grupo de aplicaciones IIS desde C# (.net 2)?

¿Le agradecería que publicara un código de muestra?

 avatar Oct 30 '08 18:10
Aceptado

Aquí vamos:

HttpRuntime.UnloadAppDomain();
Nathan Ridley avatar Jul 04 '2009 09:07 Nathan Ridley

Si está en IIS7 , esto funcionará si está detenido. Supongo que puedes ajustar el reinicio sin tener que mostrarlo.

// Gets the application pool collection from the server.
[ModuleServiceMethod(PassThrough = true)]
public ArrayList GetApplicationPoolCollection()
{
    // Use an ArrayList to transfer objects to the client.
    ArrayList arrayOfApplicationBags = new ArrayList();

    ServerManager serverManager = new ServerManager();
    ApplicationPoolCollection applicationPoolCollection = serverManager.ApplicationPools;
    foreach (ApplicationPool applicationPool in applicationPoolCollection)
    {
        PropertyBag applicationPoolBag = new PropertyBag();
        applicationPoolBag[ServerManagerDemoGlobals.ApplicationPoolArray] = applicationPool;
        arrayOfApplicationBags.Add(applicationPoolBag);
        // If the applicationPool is stopped, restart it.
        if (applicationPool.State == ObjectState.Stopped)
        {
            applicationPool.Start();
        }

    }

    // CommitChanges to persist the changes to the ApplicationHost.config.
    serverManager.CommitChanges();
    return arrayOfApplicationBags;
}

Si estás en IIS6 , no estoy tan seguro, pero puedes intentar obtener web.config y editar la fecha de modificación o algo así. Una vez que se realiza una edición en web.config, la aplicación se reiniciará.

dove avatar Oct 30 '2008 12:10 dove

Se ha probado que el siguiente método funciona tanto para IIS7 como para IIS8.

Paso 1: agregue una referencia a Microsoft.Web.Administration.dll . El archivo se puede encontrar en la ruta C:\Windows\System32\inetsrv\, o instalarlo como paquete NuGet https://www.nuget.org/packages/Microsoft.Web.Administration/

Paso 2: agregue el siguiente código

using Microsoft.Web.Administration;

Usando el operador nulo-condicional

new ServerManager().ApplicationPools["Your_App_Pool_Name"]?.Recycle();

O

Usando la condición if para verificar si hay nulo

var yourAppPool=new ServerManager().ApplicationPools["Your_App_Pool_Name"];
if(yourAppPool!=null)
    yourAppPool.Recycle();
Kaarthikeyan avatar Nov 22 '2018 12:11 Kaarthikeyan

Quizás estos artículos ayuden:

  • Reciclar el grupo de aplicaciones actual mediante programación (para IIS 6+)
  • Reciclaje de grupos de aplicaciones usando WMI en IIS 6.0
  • Reciclaje de grupos de aplicaciones IIS 6.0 mediante programación
  • Reciclar programáticamente un grupo de aplicaciones IIS
alexandrul avatar Oct 30 '2008 12:10 alexandrul

El siguiente código funciona en IIS6. No probado en IIS7.

using System.DirectoryServices;

...

void Recycle(string appPool)
{
    string appPoolPath = "IIS://localhost/W3SVC/AppPools/" + appPool;

    using (DirectoryEntry appPoolEntry = new DirectoryEntry(appPoolPath))
    {
            appPoolEntry.Invoke("Recycle", null);
            appPoolEntry.Close();
    }
}

También puedes cambiar "Reciclar" por "Iniciar" o "Detener".

Ricardo Nolde avatar Jan 30 '2009 17:01 Ricardo Nolde