2010-04-13 4 views
0

J'ai deux services, un qui en appelle un autre. Les deux sont marqués comme singletons comme suit:Comment appeler un service singleton WCF dans un service singleton WCF sans suspension?

[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single, 
    ConcurrencyMode = ConcurrencyMode.Multiple)] 
public class Service : IService 

Je tournai ces avec un ServiceHost comme suit:

ServiceHost serviceHost = new ServiceHost(singletonElement); 
serviceHost.Open(); 

Lorsque le service parent essaie d'appeler le service des enfants sur la même machine, le parent le service se bloque, en attendant le service de l'enfant.

Je pense déjà à m'éloigner du modèle singleton, mais y a-t-il quelque chose qui ne va pas dans mon approche? Y a-t-il une explication à ce comportement et une issue?

+0

Vous voulez dire service WCF? –

+0

Je suis désolé, oui. Je vais éditer la question –

Répondre

0

Le problème était que j'hébergeais dans une application WPF et que je n'ai pas défini UseSynchronizationContext sur false. Cela rend le service WCF hôte dans le thread UI, provoquant ainsi un blocage lorsque vous avez un service (sur le thread UI) appelant un autre service (également sur un thread UI).

1

Le service parent l'interrompt car il se peut que la méthode du service enfant prenne trop de temps. Si cela prend beaucoup de temps pour revenir, appelez-le de manière asynchrone ou faites la méthode de service enfant IsOneWayo=True dans l'attribut OpearationContract.

Le service aller simple est Feu & Oubliez type d'appel, il ne renvoie aucune valeur.

Questions connexes