由于WCF为每个用户创建一个新线程,因此可以在WCF中安全地使用静态方法/类,所以如果我有一个静态变量
public static int = 5
Run Code Online (Sandbox Code Playgroud)
如果两个客户试图同时更改它,其中一个客户是否能够为另一个客户更改它?
谢谢...
那么任何人都可以修改静态字段,他们将根据线程和处理器调度看到最新的值集.但是,为了安全实现,您应该定义一个静态对象并将其用于锁定,并通过静态属性提供对变量的访问.
private static object lockObject = new object();
private static int _MyValue = 0;
public static int MyStaticValue{
get{
int v = 0;
lock(lockObject){
v = _MyValue;
}
return v;
}
set{
lock(lockObject){
_MyValue = value;
}
}
}
Run Code Online (Sandbox Code Playgroud)
只要WCF的服务主机保持进程活动,这就是线程安全以及为每个线程和每个实例共享.
在IIS或任何此类流程模型中,如果流程被回收,您将丢失最后一个静态值.
您应该使用某种服务器/应用程序级别存储.例如HttpContext.Current.Server(在ASP.NET的情况下).