J'ai une application ASP.NET Web Forms qui effectue en interne de nombreux appels SOAP et REST aux services Web. Les appels SOAP sont effectués à l'aide du code "wrapping" propre à Microsoft. Les appels REST sont faits à partir d'un simple client REST. Ce client utilise l'option Utiliser des blocs pour disposer de toutes les ressources.WebRequest and Resources - Timeout ASP.NET
L'application fonctionne correctement pendant quelques heures, puis raccroche. Le site ne pourra plus servir les pages asp.net. J'ai testé le site en y mettant un fichier hello.htm ... ça s'est bien passé. C'est donc définitivement un problème dans l'espace moteur ASP.NET.
Il semble qu'il n'y ait plus de webrequests dans une piscine. Je pourrais être loin. Que puis-je essayer? Que devrais-je regarder? Il faut des heures pour que le problème soit reproduit. Redémarrer le site sur IIS résout le problème, mais de cource n'est pas vraiment une solution avec laquelle nous pouvons vivre.
début de la trace d'erreur et de la pile:
Erreur de serveur dans application '/'.
L'opération a expiré Description: Une exception non gérée s'est produite lors de l'exécution de la demande Web en cours. Veuillez consulter la trace de la pile pour plus d'informations sur l'erreur et son origine dans le code.
Détails de l'exception: System.Net.WebException: L'opération a expiré
Source Erreur: Une exception non gérée a été générée pendant l'exécution de la demande Web actuelle. Les informations concernant l'origine et l'emplacement de l'exception peuvent être identifiées à l'aide de la trace de la pile d'exceptions ci-dessous.
Trace de pile: [WebException: L'opération a expiré] System.Net.HttpWebRequest.GetRequestStream() 5322142 System.Web.Services.Protocols.SoapHttpClientProtocol.Invoke (String methodName, objet [] paramètres) +103
UPDATE et PLUS d'INFO
Les appels Homegrown REST et SOAP sont tous fait synchrone.
Ils ne sont pas de longue durée, ils prennent environ 1 sec.
Les services Web sont hébergés sur un serveur Tomcat (machine différente) dans le même centre de données.
L'application .NET appelle les services SOAP et REST sur le serveur Tomcat. L'application en quelque sorte fixé lui-même après environ une heure de rester dans cet état bloqué. Pensées? Comment surveiller le .NET Threadpool? Est-ce que DefaultConnectionLimit affecte les connexions sortantes auto-initiées?
RÉSOLUTION voir les commentaires supplémentaires aux réponses et ... 1) Fermer tous les flux et les réponses/demandes de votre code Homegrown REST (oups)
2) System.Net.ServicePointManager.DefaultConnectionLimit = 96;
// valeur par défaut = 12 fois Nombre de cœurs
System.Net.ServicePointManager.MaxServicePointIdleTime = 3000;
// default = 100000 (100 secondes)
En fixant un code qui fuit et le calendrier le plus rapide tout IdleTime semble fonctionner correctement maintenant
Y a-t-il des limites d'utilisation sur les services SOAP externes que vous appelez? Déterminez quel service il appelle et voyez si vous pouvez le frapper à plusieurs reprises autant de fois que vous le frappez en pratique. Toutes les pages appellent-elles ce même service? Est-ce que tous les appels SOAP échouent ou seulement celui-ci? –
Je peux frapper à partir de la même boîte avec un client WinForms et une autre application Web ASP.NET (même IIS). Tous appels REST ou SOAP à partir de ce délai d'attente de site IIS. Le journal des applications l'a répertorié comme un délai WebException – BuddyJoe
Comment puis-je vérifier la quantité de mémoire occupée par cette application? Je ne suis pas encore familier avec la navigation IIS 7 ou win2008 – BuddyJoe