如何在WCF服务中维护会话

时间:2014-03-25 07:49:47

标签: c# wcf session

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

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

svc文件中的

1- [ServiceBehavior(InstanceContextMode = InstanceContextMode.PerSession)]。

ServiceContract中的2- [ServiceContract(SessionMode = SessionMode.Allowed)]

3-使用wsHttpBinding作为basicHttpBinding不支持Session。

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

我无法在我的服务webconfig中实现3点,也无法更改TestClient的配置。任何人都可以指导我。感谢

1 个答案:

答案 0 :(得分:0)

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

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

提示:

  • SessionData包含ClientName,TimeOfConnection,YourUsefulData
  • ClientName是IP-Adresse或其他一些初始标识符的占位符

只有在SessionHandler中存在提供的Guid时,客户才需要注册并完成所有后续操作。