8
votes

Variables statiques persistantes sur les sessions dans le service de WCF

J'ai un service WCF avec des sessions requises

   [ServiceContract(SessionMode = SessionMode.Required) ]


0 commentaires

3 Réponses :


4
votes

Le champ statique est global pour la vie de l'application. Donc différents clients voient la même variable statique. Si vous voulez une "variable statique" pour chaque client, vous devrez le stocker en quelque sorte dans l'état de la session de cet utilisateur (je ne sais pas bien WCF, donc je ne sais pas ce que cela signifie exactement dans le contexte de la WCF)


0 commentaires

10
votes

Les variables statiques sont partagées dans l'ensemble du processus, d'où le comportement que vous voyez. Mais si vous définissez le service Mode contextuel d'instance à la session , alors cette instance de service sera créée par session, ainsi que ses variables (non statiques). Donc, ici Certainvar est unique à la session: xxx


3 commentaires

Mais que se passe-t-il si le service est instancié plus d'une fois dans le même client? Est-ce que quelque part être réinitialisé ou aurait-il la même valeur pour les cas de toutes les instances de la session?


@Orch c'est une bonne question - je crois que ce serait ce dernier. La session est basée sur un cookie ou un jeton dans l'URL, qui devrait rester identique même si un nouveau client est instancié. En d'autres termes, WCF est suffisamment intelligente pour instancier uniquement une instance de service.


@Orch en fait, ici dit que dans WCF, le client est responsable de l'initiation et de la fermeture des sessions. Donc, finalement, le client décidera lorsque la session se termine. MSDN.MicRosoft.com/en-us/Library/ms731193.aspx



3
votes

Portée d'une variable statique est le domaine de l'application, c'est-à-dire parce que votre type réel (classe à partir de laquelle des instances sont créés) est chargé une fois dans un domaine d'application, de même que toutes ses variables statiques et leurs méthodes associées. Donc, même si vous avez plusieurs instances ou une instance unique d'un service, ils partageront la variable statique.


0 commentaires