web-dev-qa-db-fra.com

Augmenter le délai d'expiration des demandes d'applications Web Azure

Existe-t-il un moyen d’augmenter le délai de requête pour les applications Web Azure?

Si je retarde la demande de quelque temps que ce soit pendant plus de 2 minutes, la demande échoue sans erreur (page vierge renvoyée) ou une réponse vague.

    public ActionResult Index()
    {
        System.Threading.Thread.Sleep(230000);
        return View();
    }

J'ai de longues requêtes à exécuter (téléchargement de fichiers volumineux/de travaux de conversion de fichiers PDF volumineux) - existe-t-il un moyen de contourner ce problème? Je préférerais éviter d'utiliser VM, l'hébergement est possible. J'ai essayé d'adapter l'application Web aux plans de base ou standard, mais cela ne semble pas faire de différence. 

18
woggles

Non, vous ne pouvez pas augmenter le délai d'expiration pour Azure App Services (230 secondes). Vous pouvez passer à un service cloud ou à IIS hébergé sur un VM sur lequel vous avez le contrôle sur ces paramètres. Vous pouvez également passer à un modèle asynchrone dans lequel le client fait une demande, obtient une sorte de ticket ou un identificateur qui peut interroger à nouveau pour voir si le traitement est effectué. Il existe de nombreux exemples de modèles de type asynchrone pour les applications Web parmi lesquels vous pouvez choisir . Réf: https://social.msdn.Microsoft.com/Forums/en-US/05f254a6-9b34-4eb2-a5f7 -2a82fb40135f/time-out-after-230-second? Forum = windowsazurewebsitespreview

9

J'espère que cela vous aidera https://Azure.Microsoft.com/en-us/blog/new-configurable-idle-timeout-for-Azure-load-balancer/ . Mais je pense que c'est une mauvaise idée de garder la demande pendant l'exécution d'un travail difficile. A mon avis, vous feriez mieux de mettre en œuvre un travail en arrière-plan et de vérifier son statut client de temps en temps.

4
unconnected

Essayez de rendre votre action asynchrone si elle est censée durer longtemps pour éviter les impasses sur votre serveur Web:

public async Task<ActionResult> Index()
{
    await Task.Delay(230000);
    return View();
}

Et vous pouvez définir le délai d'expiration du script dans le code du contrôleur:

HttpContext.Current.Server.ScriptTimeout = 300;

Notez que HttpContext est instancié sur une base par requête, donc il reviendrait à la valeur par défaut lors de la prochaine requête

1
Aram

Vous pouvez déployer l'application Web à l'aide du script d'automatisation et ajouter cette ligne sous "ressources":

        {
          "name": "WEBSITES_CONTAINER_START_TIME_LIMIT",
          "value": 1800
        },

où valeur est par défaut 230, mais peut être augmenté jusqu'à 1800. Vous pouvez également ajouter un nouveau paramètre sous Paramètres d'application, nommé WEBSITES_CONTAINER_START_TIME_LIMIT et avec la valeur en secondes de votre choix.

1
Jake OPJ