我有一个需要会话的WCF服务
[ServiceContract(SessionMode = SessionMode.Required) ]
Run Code Online (Sandbox Code Playgroud)
和一些静态字段.我认为通过会话,静态字段对于每个会话将保持相同,但是具有针对不同会话的新实例.但是,当我有两个不同的客户端使用该服务时,我看到的是当一个客户端更改字段的值时,此更改也会影响另一个客户端.这是不同会话的正常行为吗?或者您认为我的服务甚至可能不会创建不同的会话?
我正在使用netTCPbinding.
静态变量在整个过程中共享,因此您看到的行为.但是,如果将服务的实例上下文模式设置为每个会话,则将为每个会话创建该服务实例及其(非静态)变量.所以这里somevar的会议是独一无二的:
[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerSession)]
public class Service : IService
{
private string sessionVariable; // separate for each session
private static string globalVariable; // shared across all sessions
}
Run Code Online (Sandbox Code Playgroud)
静态字段在应用程序的生命周期中是全局的。所以不同的客户端看到相同的静态变量。如果您想要每个客户端都有“静态变量”,那么您必须将其存储在该用户的会话状态中的某个位置(我不太了解 WCF,所以我不知道这在 WCF 上下文中到底意味着什么)
| 归档时间: |
|
| 查看次数: |
12635 次 |
| 最近记录: |