Déployer une application directement depuis visual studio 2010
Les 3 modes de concurrence wcf
1. Les 3 modes de concurrence WCF Auteur: Alain BELUT
2. WCF propose 3 modes de Concurrence:
Single
Multiple
Reentrant
Single : le MSDN nous dit : L'instance de service est monothread et n'accepte pas
d'appels réentrants. Si la propriété InstanceContextMode est Single, et que des
messages supplémentaires arrivent pendant que l'instance sert un appel, ces messages
doivent attendre jusqu'à ce que le service soit disponible ou jusqu'à expiration de leur
délai d'attente.
Reentrant : le MSDN nous dit : L'instance de service est monothread et accepte des
appels réentrants. Le service réentrant accepte des appels lorsque vous appelez un
autre service ; il vous incombe par conséquent d'assurer la cohérence de l'état de vos
objets avant les appels sortants et vous devez confirmer que les données d'opération
locales sont valides après des appels sortants. Notez que l'instance de service est
déverrouillée uniquement en appelant un autre service sur un canal. Dans ce cas, le
service appelé peut réentrer le premier service via un rappel. Si le premier service n'est
pas réentrant, la séquence des appels provoque un interblocage.
Multiple : le MSDN nous dit : L'instance de service est multithread. Il n'existe aucune
garantie de synchronisation. Comme d'autres threads peuvent modifier votre objet de
service n'importe quand, vous devez gérer à tout moment la synchronisation et la
cohérence d'état.
01/03/2012 Groupe NOVENCIA - 25 Rue de Maubeuge 75009 PARIS - Tél. : 01 44 63 53 13 - Fax : 01 44 63 53 14 - www.novencia.com - contact@novencia.com 2
3. Pour bien comprendre tout ce qui suit il faut aussi rappeler que par défaut, un service
est configuré : InstanciateContextMode.PerCall, ce qui signifie qu'à chaque appel au
service une nouvelle instance est créée… et finalement la finesse décrite ici n'est pas
visible! Pour pouvoir tester ce qui suit, il faudra utiliser InstanciateContextMode.
Single ou InstanceContextMode.PerSession de sorte qu'une seule instance de service
soit mise à disposition.
Pour mieux comprendre ces 3 modes, imaginons que nous avons un client qui fait
appel à un service WCF qui lui-même fait appel à un second service WCF.
Le second service WCF va mettre N secondes pour répondre.
(On rappelle que le service WCF 2 prend N secondes pour répondre et qu'il y a donc un
délai à ce niveau)
Imaginons qu'un second client fait appel au premier service WCF.
On modifie le paramètre ConcurrencyMode sur le premier service :
01/03/2012 Groupe NOVENCIA - 25 Rue de Maubeuge 75009 PARIS - Tél. : 01 44 63 53 13 - Fax : 01 44 63 53 14 - www.novencia.com - contact@novencia.com 3
4. Cas 1 : ConcurrencyMode.Single (le mode par défaut d'un service WCF)
01/03/2012 Groupe NOVENCIA - 25 Rue de Maubeuge 75009 PARIS - Tél. : 01 44 63 53 13 - Fax : 01 44 63 53 14 - www.novencia.com - contact@novencia.com 4
5. Cas 2 : ConcurrencyMode.Multiple
01/03/2012 Groupe NOVENCIA - 25 Rue de Maubeuge 75009 PARIS - Tél. : 01 44 63 53 13 - Fax : 01 44 63 53 14 - www.novencia.com - contact@novencia.com 5
6. Cas 3 : ConcurrencyMode.Reentrant
01/03/2012 Groupe NOVENCIA - 25 Rue de Maubeuge 75009 PARIS - Tél. : 01 44 63 53 13 - Fax : 01 44 63 53 14 - www.novencia.com - contact@novencia.com 6
7. Le mode Reentrant permet d'obtenir de meilleures performances sans modifier de code.
Lorsque ce mode est configuré pour un service, il sera capable d'accepter des nouvelles
demandes dès lors qu'il aura fait appel à un autre service.
Cela permet donc de gagner du temps sur les traitements.
Contrairement au mode Multiple vous n'aurez pas à gérer les accès multiples aux objets
du service.
Vous pouvez télécharger le code de démonstration fonctionnant sous Visual Studio 2010,
FW 4.0 qui illustre le plus simplement du monde ce que nous venons de présenter.
myprojects.zip
01/03/2012 Groupe NOVENCIA - 25 Rue de Maubeuge 75009 PARIS - Tél. : 01 44 63 53 13 - Fax : 01 44 63 53 14 - www.novencia.com - contact@novencia.com 7