2008-10-20 6 views
4

J'ai développé un service WCF VB.NET qui recive et renvoie des données. Lorsque le premier client se connecte, il démarre la sortie de données qui se poursuit également si le client est fermé. Si un nouveau client se connecte, un nouvel objet est créé et la sortie de données commence au début et continue en parallèle avec l'ancienne instance. Existe-t-il un moyen de lire le même objet de service à partir de plusieurs clients?Service WCF unique pour plusieurs connexions client

Le service est auto-hébergé.

MISE À JOUR: je résolu le problème en ajoutant le bit de code suivant à la classe de service:

<ServiceBehavior(ConcurrencyMode:=ConcurrencyMode.Multiple, 
    InstanceContextMode:=InstanceContextMode.Single)> 
    ... 

Pour utiliser la surcharge ServiceHost qui prend dans le SingletonInstance, le service doit être étiquetée avec les ServiceBehaviours appropriés .

Répondre

2

je parle des options:

http://www.iserviceoriented.com/blog/post/Configuring+Performance+Options+-+WCF+Gotcha+3.aspx

D'abord, vous avez InstanceContextMode qui peut être simple, Percall ou PerSession. Cela contrôle comment les nouvelles instances de votre classe de service sont créées. En outre, les paramètres de limitation et de simultanéité sont importants car la définition du mode de contexte de l'instance sur quelque chose comme single sans changer le mode concurrentiel en multiple pourrait avoir de graves conséquences négatives. Jetez un oeil à la poste pour une discussion plus détaillée.

+1

InstanceContextMode = Single ne contrôle toujours pas les processus IIS. IIS peut toujours décider d'arrêter le processus de service s'il n'y a pas de demandes en attente. –

2

Si vous hébergez votre service, vous pouvez utiliser la surcharge du constructeur ServiceHost qui prend l'instance de service au lieu d'un type de service. Tous les clients se connecteront à la même instance de service.

Si vous êtes hébergé dans IIS, vous n'avez aucun contrôle sur les instances de service. Ce qui est encore pire, vous n'avez pas de contrôle sur la durée de vie du processus. Ainsi, si vous voulez un signleton, vous devrez avoir votre propre processus et les instances de service s'y connecteront.

MISE À JOUR: Comme @jezell a souligné, il y a un certain contrôle sur l'instanciation du service dans IIS par le InstanceContextMode. Cependant, cela ne contrôle toujours pas les processus IIS.

+0

Parlez-vous d'IIS 6? Je suppose qu'il pourrait y avoir des changements dans IIS 7 mais pas sûr cependant. Faites-moi savoir si cette chose est possible avec IIS 7. Merci. – sajidnizami

+0

L'auto-hébergement est effectué dans un service Windows ou un processus autonome, en créant une instance de ServiceHost et en lui attribuant le type ou l'instance du service à héberger. Dans ce scénario, l'auteur du code contrôle la durée de vie du processus et/ou les instances de service. –

+0

J'utilise un service d'auto-hébergement et je dois utiliser le constructeur de surcharge de service. Je vais essayer. Merci –

Questions connexes