Reiniciar (reciclar) un grupo de aplicaciones
¿Cómo puedo reiniciar (reciclar) el grupo de aplicaciones IIS desde C# (.net 2)?
¿Le agradecería que publicara un código de muestra?
Aquí vamos:
HttpRuntime.UnloadAppDomain();
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á.
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();
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
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".