【问题标题】:How to maintain Session in WCF ServiceWCF服务中如何维护Session
【发布时间】:2014-03-25 07:49:47
【问题描述】:

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

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

1- [ServiceBehavior(InstanceContextMode = InstanceContextMode.PerSession)] 在 svc 文件中。

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

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

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

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

【问题讨论】:

    标签: c# wcf session


    【解决方案1】:

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

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

    提示:

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

    只有在提供的Guid存在于SessionHandler中时,客户端必须注册并且所有后续操作才会完成。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-10-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多