静态变量在WCF服务中的会话中保持不变

时间:2013-07-25 19:51:26

标签: c# wcf session

我有一个需要会话的WCF服务

   [ServiceContract(SessionMode = SessionMode.Required) ]

和一些静态字段。我认为通过会话,静态字段对于每个会话将保持相同,但是具有针对不同会话的新实例。但是,当我有两个不同的客户端使用该服务时,我看到的是当一个客户端更改字段的值时,此更改也会影响另一个客户端。这是不同会话的正常行为吗?或者您认为我的服务甚至可能不会创建不同的会话?

我正在使用netTCPbinding。

3 个答案:

答案 0 :(得分:9)

静态变量在整个过程中共享,因此您看到的行为。但是,如果您设置服务的instance context mode to per-session,那么将为每个会话创建该服务实例及其(非静态)变量。所以此处somevar对于会话来说是唯一的:

[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerSession)] 
public class Service : IService
{
    private string sessionVariable;         // separate for each session

    private static string globalVariable;   // shared across all sessions
}

答案 1 :(得分:3)

静态字段在应用程序的生命周期中是全局的。所以不同的客户端看到相同的静态变量。如果你想为每个客户端提供“静态变量”,那么你必须将它存储在该用户的会话状态中(我不太了解WCF所以我不知道这意味着什么在WCF的上下文中)

答案 2 :(得分:2)

静态变量的范围是Application Domain,这是因为您的实际Type(创建实例的类)在应用程序域中加载一次,因此与其关联的所有静态变量和方法也是如此。因此,即使您有多个实例或服务的单个实例,它们也将共享静态变量。