2009-11-23 13 views
3

J'ai lu que je devrais stocker un ObjectContext dans HttpContext.Current afin de partager mon ObjectContext entre différents services/référentiels qui sont appelés dans une demande. Je me demande s'il est sûr d'utiliser un ObjectContext avec l'attribut [ThreadStatic] sur une variable de classe static à la place. Est-ce une chose sûre à faire? Chaque requête est-elle traitée dans son propre thread?Est-il possible de stocker un objet ObjectContext dans une variable statique de thread dans ASP.NET?

Répondre

7

Non, il peut y avoir plusieurs demandes dans le même thread et, plus important, une demande peut être traitée dans plusieurs threads. Ceci est appelé thread agility, et vous rencontrerez des problèmes lorsque vous stockez des choses dans les variables thread-statiques au lieu du contexte: Lorsque ASP.NET passe d'un fil à l'autre lors de la même demande, le HttpContext est toujours accessible , mais la variable thread-static ne l'est pas.

Quelques liens avec de plus amples informations:

+0

+1 très intéressant, je ne savais pas à propos de ce commutateur de thread dans les premières étapes du traitement des demandes. – AnthonyWJones

+1

Il n'existe aucune garantie que le même thread serait utilisé pour traiter la requête entière. MAIS, une implémentation change-t-elle vraiment les threads? – mayu

3

Un seul fil est utilisé pour traiter une demande et aucune autre demande utilisera ce thread jusqu'à ce que la demande existante soit terminée. Cependant, vous devez prendre en compte la manière dont vous vous assurez que les éléments de votre objet de contexte sont éliminés même s'il se passe quelque chose d'exceptionnel. Une fois que le thread est terminé avec une demande pour une raison quelconque, il sera réutilisé pour traiter d'autres demandes. Vous ne voulez pas l'état d'une demande précédente qui fuit dans le suivant.

+0

Cette réponse est fausse, malheureusement. –