2009-08-24 10 views
4

J'utilise des sessions de mémoire dans mon application ASP.NET MVC, ce qui signifie que je ne peux avoir qu'un seul thread de travail correct? Cela signifie-t-il que j'ai un traitement parallèle dans mon application (pensez aux demandes concurrentes) ou non? Est-ce que ma demande accepte seulement 1 demande à la fois?Fil de travail individuel ASP.NET? (En session mémoire)

Modifier: Selon le site Web IIS7:

If the application uses in-process session variables, 
the application will not function correctly, because the same user requests 
are picked up by different worker processes that 
do not share the same session details. 

Cela signifie donc la session en mémoire ne peut avoir 1 thread de travail ou non? Voir aussi here depuis les forums de IIS7.

+0

Les processus et les unités d'exécution signifient des choses différentes dans le contexte d'ASP.NET et d'IIS. Plusieurs processus signifient que vous avez plusieurs magasins de sessions. –

Répondre

3

Votre application reçoit plusieurs demandes à la fois. En fonction de vos modifications et de vos commentaires, vous recherchez des informations sur les Jardins Web et les sessions, par opposition aux discussions et à l'état des sessions.

Web Gardens utilise plusieurs processus et agit comme un équilibreur de charge en ce qui concerne l'état de la session. Chaque processus aura un magasin de session en mémoire séparé. IIS enverra des demandes à n'importe quel processus disponible. Étant donné que les processus ne partagent pas l'état de la session, l'utilisation de la session ne fonctionnera réellement que si votre fournisseur de session est partagé entre tous les processus du jardin Web.

Web Gardens n'a de sens que si vous utilisez quelque chose comme SQL Server pour l'état d'une session et que vous voulez avoir une affinité avec un processeur/noyau particulier. Puisque vous pouvez augmenter le nombre de threads, cela peut être une optimisation plus appropriée pour certains utilisateurs que l'utilisation de jardins Web. Cependant, certaines applications peuvent mieux fonctionner avec les jardins Web en raison d'une charge de travail ou d'une caractéristique d'application particulière. L'utilisation de jardins Web dans les tests pourrait également aider à résoudre certains problèmes potentiels liés à l'équilibrage de charge. Je crois qu'il utilise le .NET ThreadPool et dispose de 20 threads par défaut. Chaque requête arrivant sur le serveur peut être gérée sur un thread séparé. Les ASP.NET performance guidelines ont quelques informations sur ce sujet.

+0

Cela ne crée-t-il pas un problème avec la session en mémoire? Pour autant que je sache, les sessions doivent rester sur le même fil ou tout éclate. – Alex

+0

Je ne vois pas pourquoi les threads seraient liés aux sessions. L'ID de session doit être suffisant pour rechercher les données de session afin qu'il n'y ait aucune raison de mapper sur le même thread. Les données de session sont stockées séparément même si elles sont en mémoire. Les mêmes API sont utilisées pour brancher les autres fournisseurs de session. –

+0

Mis à jour la question avec citation de IIS7 site & lien du forum. La session supposée en processus (en mémoire) ne partage pas les informations entre les threads de travail. Est-ce une mauvaise information? – Alex

-1

Dans les sessions de mémoire signifie que vous devez généralement seulement avoir une bande frontal serveur à la fois, pas un seul thread de travail: D

La raison étant que toute information stockée en session sur une machine n'est pas disponible de l'autre. Si vous disposez de deux serveurs Web frontaux et que votre proxy ou votre pare-feu effectue un "équilibrage de charge" en assignant de manière aléatoire des requêtes aux serveurs Web, vous aurez alors des problèmes. Cela dit, le problème est facilement résolu avec des "sessions collantes" où les utilisateurs sont toujours envoyés sur le même serveur.

-Oisin

+0

Suivi: Pourquoi ne pouvez-vous pas activer le traitement 'web garden' sur votre machine, puis sur plusieurs CPU sur un même serveur? Cela provoque une perte de session aléatoire. – Alex

+0

Ma compréhension est qu'un jardin web crée plusieurs processus sur une machine. Chaque processus aura un magasin d'état de session différent. –