2014-04-27 101 views
0

我编写WCF应用程序。在服务我有方法,我想同步这种方法给所有客户。因此,一个客户端可以使用此方法,并在第一个客户端完成时等待客户端等待。我尝试[MethodImpl(MethodImplOptions.Synchronized)],但这不起作用。这是我的服务级别WCF中的同步方法

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


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

WCF中的同步方法如何?

+0

如果你设置了['InstanceContextMode']你的方法会工作(http://msdn.microsoft .com/en-us/library/system.servicemodel.servicebehaviorattribute.instancecontextmode.aspx)复制到'Single'和['ConcurrencyMode'](http://msdn.microsoft.com/zh-cn/library/system.servicemodel。 servicebehaviorattribute.concurrencymode.aspx)复制到'Multiple'。 –

回答

1

我认为在双工绑定(回调)的情况下,客户端已经注册了从服务器的回调客户端的设置才真正有意义。这是一个微妙的异国情况。当你从服务器收到这个回调时,它基本上会说将它调用到主线程上,而不是仅仅在某个任意线程池线程上运行它。

做你想做什么,你需要在服务器上创建一个显式锁:

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

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