Expiration d'une requête Web Api?
Comme MVC WebApi s'exécute sur l'asynchrone ASP.NET pipeline, sens délai d'exécution est non pris en charge.
MVC-je utiliser le [AsyncTimeout]
filtre, WebApi ne dispose pas de cette. Alors, comment dois-je le délai d'attente d'une demande en WebApi?
source d'informationauteur DalSoft
Vous devez vous connecter pour publier un commentaire.
Bâtiment sur la suggestion de Mendhak, il est possible de faire ce que vous voulez, mais pas exactement de la manière que vous voudriez faire, sans sauter à travers quelques cerceaux. Faire sans un filtre pourrait ressembler à quelque chose comme ceci:
Ici, vous recevrez un délai d'attente, car le "travail" nous faisons prennent plus de temps que le délai d'attente.
À faire ce que vous voulez avec un attribut est possible, mais pas idéal. C'est la même idée de base, comme avant, mais le filtre peut être utilisé pour exécuter l'action par la réflexion. Je ne pense pas que je recommanderais cette voie, mais dans cet exemple artificiel, vous pouvez voir comment il pourrait être fait:
Ce pourrait alors être utilisée comme ceci:
Cela fonctionne pour les types simples (chaîne de caractères) qui nous donne:
<z:anyType i:type="d1p1:string">Results</z:anyType>
dans Firefox, mais comme vous pouvez le voir, la sérialisation n'est pas l'idéal. À l'aide de types personnalisés avec ce code exact sera un peu problématiques autant que la sérialisation va, mais avec peu de travail, cela pourrait être utile dans certains cas de figure. Que les paramètres de l'action se présentent sous la forme d'un dictionnaire au lieu d'un tableau pourrait également poser des problèmes en termes de paramètre de la commande. Évidemment le fait d'avoir un réel soutien pour ce serait mieux.Autant que la vNext des choses, ils pourraient bien être la planification pour ajouter de la capacité à faire côté serveur délais d'attente pour les API Web depuis MVC et contrôleurs d'API sont en train d'être unifiée. S'ils le font, il ne sera probablement pas par le biais de la
System.Web.Mvc.AsyncTimeoutAttribute
de classe, car ils sont explicitement la suppression de dépendances surSystem.Web
.À compter d'aujourd'hui, il ne semble pas que l'ajout d'un
System.Web.Mvc
entrée à laproject.json
fichier fonctionne, mais cela pourrait bien changer. Si elle le fait, alors que vous ne seriez pas en mesure d'utiliser le nouveau cloud optimisée cadre avec ce code, vous pourriez être en mesure d'utiliser leAsyncTimeout
attribut sur le code qui est uniquement destiné à exécuter avec le plein .NET framework.Pour ce que ça vaut, c'est ce que j'ai essayé d'ajouter à
project.json
. Peut-être une version spécifique aurait rendu plus heureux?Une référence à elle apparaît dans l'Explorateur de solutions de la liste des références, mais il le fait avec un point d'exclamation jaune indiquant un problème. L'application elle-même renvoie à 500 erreurs lors de cette référence reste.
Avec WebAPI, vous traitent généralement délais d'attente sur le client côté, plutôt que du côté serveur. C'est parce que, et Je cite:
Si vous avez vraiment besoin de mettre en œuvre un timeout sur l'API côté, je recommande la création d'un thread pour faire votre travail, puis de l'annuler après une certaine période. Par exemple, vous pouvez le mettre dans un
Task
de créer votre " délai d'attente de la tâche à l'aide deTask.Wait
et l'utilisationTask.WaitAny
pour le premier à revenir. Cela peut simuler un délai d'attente.De même, si vous effectuez une opération spécifique, vérifier pour voir si elle prend déjà en charge des dépassements de temps. Assez souvent, je vais effectuer une
HttpWebRequest
de mon WebAPI, et de préciser sa Timeout propriété.Rendre votre vie plus facile, dans votre base de contrôleur ajoutez la méthode suivante:
Maintenant la chaque contrôleur qui héritent de votre contrôleur de base peuvent accéder à la méthode RunTask. Maintenant, dans votre appel d'API le RunTask méthode juste comme ça:
Donc pour ASP.NET de Base il ressemble à un équivalent de AsyncTimeOutAttribute ne sera pas mis en œuvre.
Tout n'est pas perdu même si dans ASP.NET Core WebApi et MVC ont été fusionnés en un seul projet MVC, et contrairement aux versions précédentes (au moins lors de l'hébergement à l'aide de IIS) délai d'attente de demande est prise en charge via le web.config.
La valeur par défaut est de 2 minutes