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