C# WCF中的同步方法

C# WCF中的同步方法,c#,multithreading,wcf,synchronization,C#,Multithreading,Wcf,Synchronization,我编写了WCF应用程序。在服务中,我有一个方法,我希望将此方法同步到所有客户。因此,一个客户端可以在此时使用此方法,而其余客户端则在第一个客户端完成时等待。我尝试了[MethodImpl(methodimpoptions.Synchronized)],但这不起作用。这是我的服务课 namespace WcfServiceLibrary1 { [ServiceBehavior(UseSynchronizationContext = false)] public class Serv

我编写了WCF应用程序。在服务中,我有一个方法,我希望将此方法同步到所有客户。因此,一个客户端可以在此时使用此方法,而其余客户端则在第一个客户端完成时等待。我尝试了
[MethodImpl(methodimpoptions.Synchronized)]
,但这不起作用。这是我的服务课

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


        [MethodImpl(MethodImplOptions.Synchronized)]
        public List<String> getBrute() {
           //method body
        }
     }
}
命名空间WcfServiceLibrary1{
[服务行为(UseSynchronizationContext=false)]
公共类服务1:IService1{
[MethodImpl(MethodImplOptions.Synchronized)]
公共列表getBrute(){
//方法体
}
}
}

WCF中的同步方法是如何实现的?

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

要执行所需操作,需要在服务器上创建显式锁:

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

    public List<String> getBrute() {
       lock (@lock)
       {
           //method body
       }
    }
 }
公共类服务1:IService1{
私有静态只读对象@lock=new object();
公共列表getBrute(){
锁(@lock)
{
//方法体
}
}
}

如果设置为
Single
Multiple
,您的方法就会起作用。