2010-11-12 4 views
0

Disons que j'ai un service WCF qui a accès à certaines données partagées entre plusieurs clients. Quelle est la différence entre ces deux configurations:WCF: Instanciation et concurrence Question

1) Instanciation: Single, Concurrency: Multiple, avec les données partagées stockées dans instance variables.

2) Instanciation: Par appel, simultanéité: multiple, avec les données partagées stockées dans variables statiques.

Y at-il une différence pratique? Quoi qu'il en soit, je devrai m'assurer que les données partagées sont sûres pour les threads, mais je me demande s'il y a des avantages pour une approche particulière.

Répondre

1

Notionnellement, il n'y a pas de différence. Comme vous l'avez dit, de toute façon vous devrez synchroniser l'accès aux données partagées. Pratiquement, la deuxième option est meilleure. Du livre définitif sur WCF, Programming WCF Services par Juval Lowy:

... par appel des services sont en fait le mode de gestion de l'instance préférée pour services WCF ... vous recommandons de éviter singletons dans le cas général et trouver des façons de partager l'état de le singleton au lieu de l'instance singleton elle-même.

J'utilise l'option # 2 pour mon projet. Le service WCF lui-même est simplement une façade mince aux méthodes statiques des classes où le travail est effectué. Par exemple,

public class Logger 
{ 
    private static List<Logger> _loggers = new List<Logger>(); 
    private static object _sync = new object(); 

    public static void Start() 
    { 
     Logger logger = new Logger(); 
     logger.Start(); 

     lock (_sync) { 
      _loggers.Add(logger); 
     } 
    } 

    private Logger() 
    { 
     // construct the Logger object... 
    } 

    private void Start() 
    { 
     // start the logger here... 
    } 
} 

public class LoggingService : ILoggingService 
{ 
    public void StartLogger() 
    { 
     Logger.Start(); 
    } 
} 

De toute évidence, j'ai élidé de nombreux détails, mais cela montre l'idée générale.

+0

Belle référence, même si ce n'est toujours pas clair pour moi pourquoi l'option 2 est généralement une meilleure approche. Y a-t-il une situation où l'option 1 est moins flexible, ou pas aussi efficace? – Ben

+0

Le livre indique que l'option 2 se prête davantage au traitement transactionnel que l'option 1. Cela a du sens pour moi, mais comme cela ne sert à rien dans mon projet, je n'ai pas exploré cet aspect. –