1

正如问题所说。目前,我们正在为每个会话的服务缓存 WCF 客户端代理(准确地说是 ChannelFactory)。这工作正常。但是现在我们已经转移到 Azure,并且有多个实例(会话)。我现在让 AppFabric 会话状态正常工作。所以会话是由 Azure 提供的,但现在问题在于通道工厂的缓存。因为工厂不是 [Serializable],因此它似乎无法存储在 Session[] 中。有什么选择?每次调用 WCF 服务方法时是否应该重新创建通道?

[ 1.以前的工作状态;2.新尝试的解决方案;3. 后备选项]

  1. WCF 客户端 -> ASP.NET -> 会话缓存工厂 -> 通道 -> WCF 服务
  2. WCF 客户端 -> ASP.NET -> 无法存储工厂!-> 频道 -> Azure 角色 WCF 服务
  3. WCF 客户端 -> ASP.NET -> 每次调用新通道 -> Azure 角色 WCF 服务

更新:我们已经确定,不能缓存(共享)ChannelFactory。所以问题仍然存在,我如何共享凭据 (UserNameCredentials),因此现在没有共享,并且必须以某种方式分布在拆分实例中。显而易见的选择是将加密的凭据存储在缓存中?这是个好主意吗?还有其他方法吗?

这继续作为一个新问题:如何共享 WCF 客户端凭据...

4

1 回答 1

1

如果要缓存 ChannelFactory,则需要为每个 azure 角色实例的每个会话创建一个。您是正确的,不应在会话之间共享 CacheFactories,因为它们可能支持不同的用户。

正如您所说的那样, CacheFactory 不可序列化,因此您无法将其放入分布式缓存中。

缓存它的一半原因是为了避免 CacheFactory 的设置时间(可能是几十毫秒)。由于 CacheFactory 的大小相当大,因此将其序列化进出缓存可能比这更长。

于 2013-01-14T16:32:16.400 回答