如何在几个wcf的客户端之间共享一个会话?

时间:2010-09-30 12:39:27

标签: wcf web-services

我有几个网络服务。其中一项服务用于检索会话ID(身份验证)。我通过SessionInfo调用其他服务时传递此id。 我想使用WCF而不是经典的Web方法。如何在几个wcf的客户端之间共享一个会话?

3 个答案:

答案 0 :(得分:2)

目前尚不清楚会话是什么意思。 WCF支持四种类型的会话:

  • 传输会话 - 用于维护服务器和客户端之间会话的传输协议。例如:Net.Tcp,Net.Pipe
  • 可靠的会话 - 如果客户端和服务器都在运行,则支持在不可靠的通道上按顺序交付
  • 安全会话 - 客户端必须仅在第一次呼叫时进行身份验证,后续呼叫由会话令牌进行身份验证。此会话也称为安全上下文。
  • 应用程序会话 - 这对于操作契约和PerSession实例化的IsInitiating和IsTerminating参数具有意义。只有在使用任何前面的会话时才能使用此会话=它不能在BasicHttpBinding中使用,因为它不支持传输,可靠和安全会话。

所有这些会话都与单个客户端代理和单个服务实例之间的通信有关。开箱即用,没有提供任何其他东西。此外,没有特殊的“会话”对象。

那你究竟想要实现什么目标?您是否要替换使用ASP.NET会话的ASMX服务?在这种情况下,请检查此sample

修改

从第一个服务接收单个Id并在后续调用多个服务时重用此Id的想法应该称为corelation(一个大活动/事务)或联合(安全相关)而不是会话。

答案 1 :(得分:0)

正如marc_s所说,你无法分享会话。

但是您可以做的是将会话ID作为WCF调用中的参数传递,以便您知道代表正在进行调用。

确保对这些来电使用加密。

答案 2 :(得分:0)

推荐的方法是通过手动维护呼叫之间的会话状态。您可以按照自己的方式生成会话ID,并使用您自己的逻辑在每次调用时将会话信息加载/保存到数据库中。

通过这样做,您将以支持:

的方式支持会话
  • 负载平衡
  • 会话分享
  • 故障转移