3 votes

Comment gérer un délai d'attente de requête dans une application ASP.NET MVC5?

Jusqu'à présent, j'ai essayé ce qui suit - 1) Ajouté un attribut personnalisé pour gérer le timeout.

 public class TimeOutFilter : ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        System.Web.HttpContext.Current.GetType().GetField("_timeoutState", System.Reflection.BindingFlags.Instance |
        System.Reflection.BindingFlags.NonPublic).SetValue(System.Web.HttpContext.Current, 1);

        base.OnActionExecuting(filterContext);
    }
}

Ajouté ce qui suit dans Global.asax

filters.Add(new TimeOutFilter());

Utilisé l'attribut [TimeOutFilter] pour décorer le contrôleur

2) Ajouté l'attribut AsyncTimeout pour décorer le contrôleur/l'action de la manière suivante :

[AsyncTimeout(10)]

3) Défini executionTimeout sur une valeur dans le fichier web.config.

4) Défini HttpContext.Server.ScriptTimeout sur une valeur dans le contrôleur.

HttpContext.Server.ScriptTimeout = 10;

En utilisant les étapes du point 1, j'ai pu rediriger l'utilisateur vers l'écran de connexion en cas de timeout de la requête. Mais ce n'est pas ce que je recherche.

Je cherche à obtenir ou déclencher une exception lorsque le timeout de la requête se produit.

Est-ce que quelqu'un pourrait me dire s'il existe un moyen de faire cela?

1voto

benwasd Points 995

Ne pas utiliser le comportement grossier d'arrêt de thread (1) et (4).

L'attribut AsyncTimeout (2) est bon mais il déclare seulement (comme executionTimeout dans web.config (3)) la durée de temps d'attente.

Dans le pipeline totalement asynchrone de MVC5, il existe une manière efficace de chronométrer une opération: lancer en utilisant les CancellationTokens!

Vous pouvez obtenir ces jetons par paramètre ou avec les propriétés Request.TimedOutToken et Response.ClientDisconnectedToken.

Ce article de blog m'a beaucoup aidé.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X