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