2010-10-11 19 views
1

J'ai écrit une page de test qui fait beaucoup de travail dans une méthode appelée au chargement de la page. Ce processus comme je l'ai maintenant prend environ 12 secondes.IIS 6/7 Threading - La page aspx longue durée empêche le chargement d'autres pages aspx

Si j'essaie de charger une autre page pendant le chargement de la première page longue, cette seconde page ne fait rien sauf l'écriture d'un monde Hello, elle ne se charge pas avant la fin de la première longue page.

Pourquoi est-ce le cas? Je pense que IIS serait capable de gérer plusieurs connexions simultanées, il semble fou qu'une longue page en cours d'exécution arrêterait toutes les autres pages de l'application de chargement. Je dois manquer quelque chose ou ne pas comprendre comment fonctionne IIS.

Je pense que plusieurs demandes indépendantes seraient générées sur différents threads. Est-ce seulement le cas si les demandes proviennent de différentes sessions entièrement? Toutes les requêtes d'une seule session sont-elles liées à un seul thread?

bd

+0

Est-ce que cela se passe dans la production ou sur votre PC de développement? Avez-vous un débogueur attaché au processus de travail? – Kev

+0

Notre serveur Stage exécutant IIS 6 et mon ordinateur local exécutant IIS 7 sur Server 2008 R2 semblent montrer le même comportement. – BrooklynDev

Répondre

6

Vous devez désactiver sessionState ... si la session est activée, toute demande de sous-séquent est en attente sur le fil précédent pour terminer afin de continuer sur cette session particulière .

Pour désactiver la session, il n'est pas nécessaire d'attendre une session précédente.

dans web.config mis

<system.web> 
    <sessionState mode="Off" /> 
</system.web> 

Maintenant, vous devriez avoir les processus de demande en même temps.

+0

merci de travailler pour moi, mais pourriez-vous s'il vous plaît expliquer plus? –

0

C'est un problème de filetage. Alors que IIS peut gérer plusieurs connexions simultanément, ASP.NET est configuré par défaut en mode monothread.

Ce choix par Microsoft était d'empêcher les développeurs factice de faire des erreurs communes de concurrence. ASP.NET pour Mono ne montre pas ce comportement et si vous accédez à des ressources partagées sans verrouillage préalable, vous pourriez être ... f ... vous savez;) par une page jaune de la mort.

Je ne me souviens pas de la procédure exacte, mais dans les propriétés de votre site Web, vous pouvez choisir le pool d'applications ainsi que le nombre de threads. J'ai vu avec mes yeux que IIS6 le met à 1 par défaut.

Si vous ne pouvez pas le trouver, dites-le moi et demain je vais jeter un oeil sur mon serveur de développement en laboratoire.

J'espère avoir été utile.

+0

J'ai regardé IIS 6 et 7 mais je n'ai pas trouvé d'attribut count de menace, juste une entrée pour le nombre de processus. J'ai fait quelques recherches et il semble que vous pouvez configurer le threading en utilisant quelques fichiers .config mais je ne suis pas sûr que cela résout mon problème en tant que valeur par défaut pour les threads par processus est comme 10-40. – BrooklynDev

+0

L'ajout de threads résout votre problème. Essayez d'ajouter des processus et voyez si cela fonctionne de la même manière ... –

+0

Mais la valeur par défaut des threads par processus n'est pas 1. Donc, ce n'est pas le nombre total de threads par processus qui pose problème. Pour une raison quelconque, plusieurs demandes agissent comme si elles étaient traitées sur le même thread, c'est le problème. Je me demande pourquoi c'est. Toutes les demandes d'une seule session sont-elles traitées sur 1 et un seul thread? Ne pas en savoir plus sur la façon dont IIS fonctionne sous le capot, cela semble être ma meilleure idée de ce qui se passe. Ajout de processus 'web garden' est une fonctionnalité différente entièrement, et il faudrait que je stocker la session hors processus et est beaucoup trop pour une application simple – BrooklynDev

5

Je viens de frapper ce problème aussi, et pour moi, il s'avère que c'est la fonctionnalité de session de ASP.NET. Fondamentalement, si vous avez des sessions activées, chaque demande retournera dans l'ordre où il est arrivé par utilisateur. Essayez d'utiliser 2 navigateurs différents, pour moi, il n'est plus bloqué. Voici une question similaire:

IIS 5.1 on XP Classic ASP appears to be in single threaded mode