由于某些方法需要控制只有一个用户能同时调用,想使用Lock和单例进行双重锁定。问了很多人,有人说可以锁;有些人说不同的用户调用WS会相当于生成方法的副本,不同的用户使用单例是没有意义的?请问大家,正解如何?
------解决方案--------------------
那就首先控制ws实例的产生,比如通过单例模式,如果不控制ws实例,不同的用户调用都会产生一个新的ws实例
------解决方案--------------------
WCF不了解
如果是基于asp.net的Webservices,可以在服务端进行控制
可以使用Application对象的Lock来进行操作
参考
http://www.cnblogs.com/rustylk/archive/2011/05/24/2055144.html
Application那一段
------解决方案--------------------
也不用 lock, 除了单例之外,再通过 ServiceBehavior 里的重入限制即可控制。
[ServiceBehavior(InstanceContextMode=InstanceContextMode.Single,ConcurrencyMode=ConcurrencyMode.Single)]
当然这样Service里所有方法都限制了。。。
也可以在方法上加上(和lock类似):
[MethodImpl(MethodImplOptions.Synchronized)]
------解决方案--------------------
可以lock到一个静态变量上,我们就是这么用。
但是要注意,如果需要控制的方法访问外部资源,例如文件等。要注意application pool的web garden不能设置成多余1,否则就需要进程间同步了。