2017-08-29 1 views
2

J'ai déployé une application .NET Web API il y a environ deux semaines dans IIS 8.0.IIS ShutDownTimeLimit Redémarrage de l'API Web Action

Il existe une longue méthode en attente qui traitera une grande quantité de choses de manière asynchrone, et cela peut prendre jusqu'à 20/30 minutes (le client peut soit fermer l'application et recevoir un e-mail avec les résultats le processus se termine). Le problème est arrivé, après 90 secondes d'attente de la réponse, l'appel se bloque et réessaye de refaire le même appel, par exemple: J'essaie de traiter 15 éléments (les insérer sur DB) et après 90 secondes, le processus se bloque et recommence (en insérant 15 autres enregistrements), et finalement tout le processus se bloque et ne finit jamais. Après un long travail de recherche et de recherche, j'ai pu constater que le pool d'applications ShutDownTimeLimit pour IIS était en train de tuer mon appel, car il était inactif et n'a reçu aucune réponse dans le délai par défaut (qui est de 90 secondes).). J'ai augmenté la valeur et cela a essentiellement résolu mon problème.

Cependant, je ne sais toujours pas pourquoi l'action sur mon contrôleur a été redéclenchée, savez-vous s'il est possible que l'IIS réessaye réellement de faire l'appel après avoir détecté que le ShutDownTimeLimit a été dépassé?

Toute aide serait appréciée. PD: Mon frontal fait juste 1 appel exact, il n'y a pas plusieurs appels entrants à partir de lui.

+0

Je rencontre exactement le même problème. Avez-vous déjà découvert pourquoi le contrôleur était en cours de redéclenchement? –

Répondre

0

Même le paramètre ShutDownTimeLimit a été dépassé, les anciens processus de travail s'arrêteront normalement (terminer le traitement des demandes) lorsque la période d'arrêt est suffisamment longue pour le permettre. Cependant, lorsque le délai d'arrêt est atteint, s'il y a une autre requête, un nouveau processus de travail peut être démarré. Et je ne pense pas que IIS va réessayer l'appel (et je l'ai testé). Alors assurez-vous qu'il n'y a pas d'autre appel de frontend ou quelque part. Par ailleurs, démarrer des tâches fire-and-forget essentiellement longues à l'intérieur d'un ApiController n'est pas une bonne idée, lire plus loin dans this question.