服务器上所有正在运行的Web服务调用之间是否共享Web服务中的静态变量?
在我的情况下,我想要一个服务器范围的同步锁定,我相信我可以用一个
完成private static Object syncHandle = new Object();
这是对的吗?
答案 0 :(得分:2)
是的,它们都是按AppDomain共享的,这就是为什么一般不应该使用它们的!
一般来说,它们不应该被使用,因为它们不太可能被正确使用。另外,因为有更安全的替代品,如HttpContext.Cache,甚至是Session状态。
但是,如果你封装了对这些静态成员的所有访问权限,并且你正确处理了锁定,那么你将拥有一个安全的实现,然后可能会成为瓶颈,所有线程都争用共享资源。没有它真的好。
此外,您似乎是指ASMX Web服务,但您应指定ASMX或WCF。
答案 1 :(得分:1)
我相信只要他们在同一个过程中运行,他们就会被分享。因此,从同一服务器请求的两个人将具有该对象的相同实例。但是,您可以在IIS上的计算机不同进程中运行不同的应用程序,在这种情况下,我非常确定不会共享对象的实例。
答案 2 :(得分:1)
除非您拥有Web Garden,否则它们都是共享的。 Web园是处理单个应用程序的多个主机进程。在这种情况下,每个主机都有自己的静态数据。