如何在WCF服务中维护会话

本文关键字:维护 维护会 会话 服务 WCF | 更新日期: 2023-09-27 17:52:50

我有一个WCF服务,我想在其中为我的身份验证方法维护会话。

我已经阅读了各种文章,并应用了以下一些在WCF服务中维护会话所需的更改,因为WCF默认不支持会话。

1- [ServiceBehavior(InstanceContextMode = InstanceContextMode. persession)] in svc file.

2- [ServiceContract(SessionMode = SessionMode. allowed)] in ServiceContract

3-使用wsHttpBinding作为basicHttpBinding不支持的会话

我使用WCFTestClient来调用我的服务。我已经检查了我的TestClient的配置,它正在使用basicHttpBinding,这是问题的原因。

我无法在我的服务webconfig中实现3点,也无法更改我的TestClient的配置。有人能给我指路吗?由于

如何在WCF服务中维护会话

为了解决这个问题,我在服务中实现了自己的SessionHandler。

  • 一个线程安全的单例类,包含一个Dictionary<Guid,>
  • 服务方法:Guid RegisterClient(ClientName ClientName){/*添加客户端到会话*/}
  • 服务方法:bool UnregisterClient(Guid clientGuid){/*从会话中删除客户端*/}
  • 服务方法:void DoThisOnServer(Guid clientGuid){/*服务功能*/}
  • void CheckTimeout(){/*遍历字典并删除超时会话*/}

提示:

  • SessionData包含ClientName, TimeOfConnection, YourUsefulData
  • ClientName是ip地址或其他初始标识符的占位符

客户端必须注册,并且只有在SessionHandler中存在所提供的Guid时才会执行以下所有操作。