microsoft management c# azure web-deployment azure-web-roles

c# - management - Deshabilitar los tiempos de inactividad de IIS en Azure Web Role



portal azure web (6)

Para evitar el reciclado de AppPool cada 20 minutos, me gustaría eliminar los tiempos de inactividad de ILE de AppPool cuando se inicia mi rol web de Azure. Mi sitio web es un proyecto de aplicación web.

¿Cómo hago esto?


Además de la respuesta de @Edward Brey, si desea cambiar otras configuraciones comunes en ese script de inicio, así es como lo hace

rem Preload %windir%/system32/inetsrv/appcmd list app /xml | %windir%/system32/inetsrv/appcmd set site /in -applicationDefaults.preloadEnabled:True rem Disable idle %windir%/system32/inetsrv/appcmd set config -section:applicationPools -applicationPoolDefaults.processModel.idleTimeout:00:00:00 rem Auto start %windir%/system32/inetsrv/appcmd set config -section:applicationPools -applicationPoolDefaults.autoStart:true rem Always running %windir%/system32/inetsrv/appcmd set config -section:applicationPools -applicationPoolDefaults.startMode:AlwaysRunning rem Disable recycling %windir%/system32/inetsrv/appcmd set config -section:applicationPools -applicationPoolDefaults.recycling.periodicRestart.time:00:00:00

Para ver una lista de opciones disponibles por sección, haga

%windir%/system32/inetsrv/appcmd set config -section:applicationPools -?


Cree una tarea de inicio para desactivar el tiempo de espera inactivo:

  1. En el proyecto del sitio web al que hace referencia su proyecto de rol web, agregue un archivo Startup.cmd a la carpeta raíz.

  2. En las propiedades de Startup.cmd , configure Copiar en el Directorio de salida para copiar si es más reciente .

  3. Agregue esta línea a Startup.cmd :

    if exist %windir%/system32/inetsrv/appcmd.exe %windir%/system32/inetsrv/appcmd set config -section:applicationPools -applicationPoolDefaults.processModel.idleTimeout:00:00:00

    El calificador if exist %windir%/system32/inetsrv/appcmd.exe es opcional. Le permite usar el mismo código en Azure Emulator Express, por lo que no necesita instalar IIS o necesita ejecutar Visual Studio como administrador.

  4. Guarde el archivo como UTF-8 sin firma . ( Archivo> Opciones de guardado avanzadas en Visual Studio).

  5. En su proyecto de rol web, en ServiceDefinition.csdef , agregue esto a WebRole :

    <Startup> <Task commandLine="Startup.cmd" executionContext="elevated" /> </Startup>


En la raíz de su proyecto de aplicación web, cree un archivo llamado WebRole.cs con el siguiente código:

public class WebRole : RoleEntryPoint { public override void Run() { RemoveIISTimeouts(); base.Run(); } private void RemoveIISTimeouts() { Process.Start( String.Format(@"{0}/system32/inetsrv/appcmd", Environment.GetEnvironmentVariable("windir")), "set config -section:applicationPools -applicationPoolDefaults.processModel.idleTimeout:00:00:00"); } }


Este es el enfoque que tomé:

using (ServerManager iisManager = new ServerManager()) { Application app = iisManager.Sites[RoleEnvironment.CurrentRoleInstance.Id + "_Web"].Applications[0]; TimeSpan ts = new TimeSpan(0, 00, 00); iisManager.ApplicationPoolDefaults.ProcessModel.IdleTimeout = ts; iisManager.CommitChanges(); }

Requiere:

using Microsoft.Web.Administration; using Microsoft.WindowsAzure.ServiceRuntime;


No te molestes Realmente debería tener una solución de monitoreo para su función web de todos modos. Y ahora que está integrado en el panel de control de Azure, es más fácil activar el monitoreo que obtener la configuración de tiempo de espera inactivo correcto (especialmente si desea mantener el privilegio mínimo).


Otra opción es configurar la acción de tiempo de inactividad de IIS para ''Suspender''. Puede hacerlo como parte de su secuencia de comandos de inicio de rol web.

El comando que necesita está en la caja como parte de la configuración de IIS (tenga en cuenta que esto funcionará con Windows Server 2012 R2 y superior, con su objetivo de código .NET Framework 4.5.1 y superior).

%windir%/system32/inetsrv/appcmd set config -section:applicationPools -applicationPoolDefaults.processModel.idleTimeoutAction:Suspend

Deberá actualizar el archivo de configuración del servicio en la nube de Azure (.cscfg) para usar la familia del sistema operativo 4, tal como lo describe scottgu en su publicación del blog .

Dado que las acciones de inicio se ejecutan cuando se aprovisionan las instancias y antes de que la aplicación web se implemente en IIS, al establecer los valores predeterminados del grupo de aplicaciones se configurará de manera predeterminada la acción de tiempo de espera de su aplicación de aplicaciones a Suspender.