Désactiver les temps morts dans le rôle D'Azure Web

pour éviter le recyclage D'AppPool toutes les 20 minutes, j'aimerais supprimer les temps morts de IIS AppPool lorsque mon rôle de web Azure commence. Mon site web est un projet D'Application Web.

comment je fais ça?

24
demandé sur Albert Bori 2013-08-07 00:07:30
la source

6 ответов

Créer une tâche de démarrage pour désactiver le délai d'inactivité:

  1. dans le projet de site référencé par votre projet de rôle web, ajoutez un fichier Startup.cmd vers le dossier racine.

  2. Dans les propriétés de Startup.cmd, définissez Copier vers le Répertoire de SortieCopier si plus récent.

  3. ajouter cette ligne à Startup.cmd:

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

    if exist %windir%\system32\inetsrv\appcmd.exe qualificatif est facultatif. Il vous permet d'utiliser le même code sur L'émulateur Azure Express, vous n'avez donc pas besoin d'installer IIS ou d'exécuter Visual Studio en tant qu'administrateur.

  4. Enregistrez le fichier en tant que UTF-8 sans signature. (Fichier > Options D'Enregistrement Avancées dans Visual Studio.)

  5. Dans votre projet de rôle web, dans ServiceDefinition.csdef, ajoutez à cela l' WebRole:

    <Startup>
      <Task commandLine="Startup.cmd" executionContext="elevated" />
    </Startup>
    
32
répondu Edward Brey 2015-01-27 09:25:15
la source

une autre option est de configurer L'action Time-Out inactif pour 'suspendre'. Vous pouvez le faire dans le cadre de votre script de démarrage de rôle web.

la commande dont vous avez besoin est sur la boîte dans le cadre de la configuration IIS (notez que cela fonctionnera avec Windows Server 2012 R2 et plus, avec votre code de ciblage .net 4.5.1 framework et plus).

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

vous devrez mettre à jour votre fichier de configuration de service Azure Cloud (.cscfg) pour utiliser la famille OS 4, comme souligné par scottgu dans son blog post.

étant donné que les actions de démarrage s'exécutent lorsque vos instances sont fournies et avant que l'application web ne soit déployée dans IIS, en définissant le pool d'applications par défaut, vous définirez de facto votre action de temporisation de l'application appli idel pour suspendre.

4
répondu Sean Feldman 2013-10-30 18:53:05
la source

À la racine de votre Projet d'Application Web, créez un fichier nommé WebRole.cs avec le code suivant:

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");
    }
}
2
répondu Albert Bori 2013-08-07 00:07:30
la source

Ne pas déranger. Vous devriez vraiment avoir une solution de surveillance pour votre rôle web de toute façon. Et maintenant qu'il est intégré dans le tableau de bord Azure, il est plus facile d'activer la surveillance que d'obtenir la bonne configuration du temps mort (surtout si vous voulez maintenir le moindre privilège).

2
répondu Edward Brey 2014-01-07 20:26:12
la source

en plus de la réponse de @Edward Brey, si vous voulez changer d'autres paramètres communs dans ce script de démarrage, voici comment faire

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

pour voir la liste des options disponibles par section, faites

%windir%\system32\inetsrv\appcmd set config -section:applicationPools -?
1
répondu illegal-immigrant 2016-12-13 01:40:16
la source

C'est l'approche que j'ai adoptée:

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();
}

Nécessite:

using Microsoft.Web.Administration;
using Microsoft.WindowsAzure.ServiceRuntime;
0
répondu artfulhacker 2013-12-30 03:20:39
la source

Autres questions sur