2014-04-27 4 views
0

J'écris l'application WCF. En service j'ai la méthode et je veux synchroniser cette méthode à tous les clients. Un client peut donc utiliser cette méthode pour le moment et attendre que le client termine son premier client. J'essaie [MethodImpl(MethodImplOptions.Synchronized)] mais cela ne fonctionne pas. Ceci est ma classe de serviceMéthode de synchronisation dans WCF

namespace WcfServiceLibrary1 { 
    [ServiceBehavior(UseSynchronizationContext = false)] 
    public class Service1 : IService1 { 


     [MethodImpl(MethodImplOptions.Synchronized)] 
     public List<String> getBrute() { 
      //method body 
     } 
    } 
} 

Comment les méthodes de synchronisation dans WCF?

+0

Votre méthode aurait fonctionné si vous aviez mis [ 'InstanceContextMode'] (http://msdn.microsoft .com/en-us/library/system.servicemodel.servicebehaviorattribute.instancecontextmode.aspx) en 'Single' et [' ConcurrencyMode'] (http://msdn.microsoft.com/fr-fr/library/system.servicemodel. servicebehaviorattribute.concurrencymode.aspx) à 'Multiple '. –

Répondre

1

Je pense que ce paramètre n'a vraiment de sens que dans le contexte d'une liaison duplex (un rappel) où le client a enregistré un rappel du serveur au le client. C'est une situation légèrement exotique. Il dit essentiellement lorsque vous recevez ce rappel du serveur l'invoquer sur le thread principal, plutôt que de simplement l'exécuter sur un thread de pool de threads arbitraire.

Pour faire ce que vous voulez, vous devez créer un verrou explicite sur le serveur:

public class Service1 : IService1 { 
    private static readonly object @lock = new object(); 

    public List<String> getBrute() { 
     lock (@lock) 
     { 
      //method body 
     } 
    } 
}