7
votes

Sécurité du fil dans ASP.NET MVC

Je suppose que cela s'applique aussi à l'ASP.NET général mais je ne suis pas sûr.

Si j'ai une méthode d'action sur un contrôleur, dites mycontroller.dosomethroughhrousique. 't interagir les uns avec les autres?


0 commentaires

3 Réponses :


14
votes

Les variables locales dans cette méthode seront par appel. Je présume (je ne sais pas MVC) que les instances de contrôleur sont par demande, de sorte que tout autre membre serait en sécurité.

Mais s'il y a des membres statiques ou autres membres partagés, ils ne sont pas sûrs.


2 commentaires

Une instance de contrôleur étant-elle par demande, faites-la du fil de sécurité? Ou existe-t-il une manière une instance d'un contrôleur peut être utilisée par plusieurs threads dans la même demande? Je veux m'assurer que si je donne à mon contrôleur une variable privée, qu'elle est en sécurité.


Un membre d'instance d'une instance de contrôleur devrait être le fil-sûr, autant que je sache. Mais assurez-vous que toutes les ressources utilisées par le contrôleur sont en réalité en sécurité. Encore une fois, notez que je ne savez que l'instance du contrôleur est par demande.



2
votes

Si la méthode instancite toutes ses propres variables et n'utilise aucun membre statique, il devrait être correct dans tous les cas.

IT L'objet est référencé par plusieurs threads à la fois et lit certaines variables de niveau de classe plusieurs fois pouvant être modifiées par un autre fil d'entre eux. Il pourrait y avoir un problème.

Si cela ne lit que des données une seule fois et n'écrire rien au niveau de la classe, alors Multi threading est un problème pour être un problème.


0 commentaires

2
votes

Pas nécessairement. Dépend de ce que vous entendez par «sécurité de fil».

Supposons par exemple qu'ils partagent un cadre d'entité, disent "DB", et ils travaillent sur une table. Puisque vous avez appelé votre contrôleur "myController" permet d'appeler ce dB.mytable Chaque requête convoque une instance différente de MyController. Jusqu'à présent, fil sûr. Chaque contrôleur crée une instance de mententies dB = nouvelles mentyties (); Jusqu'à présent, fil sûr. Mais puisque db.mytable est de type ienumerable ils interagissent les uns avec les autres. Supposons qu'ils travaillent sur la même entité de la base de données (sans serrures), disent db.mytable [0] - ils vont écraser ("Dernier pour sauver des victoires").

3 utilisateurs de votre site auront trois pointeurs indépendants (dans la pile) pointant vers le même endroit (dans la base de données). Ce n'est pas un problème de fil. C'est un problème de verrouillage de données.


1 commentaires

@ Colin-Desmond Demandez-vous - Deux personnes de mon système peuvent-elles utiliser la même ressource (telle que la même entité de données) et essayer d'écrire (mettre à jour) cela ensemble?