首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > Web Service >

Webservices使用Lock进行锁定有用吗?该怎么处理

2012-01-11 
Webservices使用Lock进行锁定有用吗?由于某些方法需要控制只有一个用户能同时调用,想使用Lock和单例进行双

Webservices使用Lock进行锁定有用吗?
由于某些方法需要控制只有一个用户能同时调用,想使用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,否则就需要进程间同步了。

热点排行