La réponse à votre question dépend de la liaison que vous utilisez. Deux paramètres contrôlent ce comportement: InstanceContextMode et ConcurrencyMode. Ces deux paramètres sont définis dans ServiceBehaviorAttribute. InstanceContextMode contrôle le mode d'instanciation du service.
Il a les valeurs suivantes:
PerCall - chaque fois que vous appelez le service, une nouvelle instance de service est créée. C'est le comportement par défaut pour les services exposés sur des liaisons qui n'utilisent pas de session de transport, de session fiable ou de session de sécurité => BasicHttpBinding, WebHttpBinding. PerSession - chaque fois que vous appelez le service à partir de la nouvelle instance de proxy, une nouvelle instance de service est créée. Tout appel ultérieur provenant du même proxy est géré par la même instance de service (l'instance réside sur le serveur). Par défaut, l'appel suivant doit être effectué dans les 10 minutes (receiveTimeout) ou l'instance de service est libérée. C'est le comportement par défaut par défaut pour les services exposés sur la liaison qui utilisent la session de transport, la session fiable ou la session de sécurité => WSHttpBinding (paramètre par défaut utilise la session de sécurité), NetTcpBinding, NetNamedPipeBinding.
Unique - une seule instance du service existe et gère tous les appels.Cette instance de service peut être créée lorsque l'hôte démarre ou lorsque le service est appelé pour la première fois.
Maintenant, vous savez comment les instances sont créées. Le second paramètre ConcurrencyMode contrôle le nombre de threads concurrents pouvant accéder à une instance unique. Chaque requête est toujours gérée dans un fil distinct.
Un seul thread peut accéder à l'instance de service. C'est le comportement par défaut. Reentrant - un thread peut accéder au service mais il peut libérer le verrou et permettre à un autre thread d'utiliser l'instance pendant que le premier thread sera bloqué. Ceci est utilisé dans le scénario de rappel.
Plusieurs threads multiples peuvent accéder à l'instance de service.
Maintenant vous savez comment l'instance peut être utilisée simultanément. Permet de jeter un coup d'oeil sur certaines combinaisons:
Percall instanciation + simple accès simultané - scénario typique sans état. Les appels simultanés multiples sont autorisés.
PerCall instancing + Concurrence multiple - n'a pas de sens. Il se comporte toujours comme une concurrence unique. Instance PerSession + Concurrence unique - plusieurs appels simultanés sont autorisés, mais un seul appel de chaque mandataire peut être traité en même temps. Les autres appels sont mis en file d'attente.
PerSession instancing + Concurrence multiple - plusieurs appels simultanés sont autorisés. Plusieurs appels de chaque proxy peuvent accéder à la même instance en même temps. Vous devez effectuer une synchronisation manuelle de l'accès aux champs partagés dans l'instance de service.
Instance unique + Concurrence unique - seule une seule requête peut être traitée à la fois. Les autres demandes sont mises en file d'attente (délai d'attente par défaut: 30 secondes).
Instanciation unique + Concurrence multiple - plusieurs appels simultanés sont autorisés. Tous les appels accèdent à la même instance en même temps. Vous devez effectuer une synchronisation manuelle de l'accès aux champs partagés dans l'instance de service.
Merci beaucoup pour la grande explication Ladislav! – Sandeep
[cet article] (http://blogs.msdn.com/b/rickrain/archive/2009/06/15/wcf-instancing-concurrency-and-throttling-part-1.aspx) indique que la valeur par défaut est 'PerSession' :( –
@Ladislav Mrnka - Donc pour 'PerSession instancing + Single Concurrency' - 1) cela signifie que deux proxys différents peuvent faire des appels simultanés, et le service peut les traiter simultanément? 2) Mais plusieurs appels d'un seul proxy seront traités un à la fois? – VoodooChild