在ASP中缓存WCF ChannelFactory或客户端代理.. NET在Azure上

本文关键字:代理 NET Azure 客户端 ChannelFactory ASP 缓存 WCF | 更新日期: 2023-09-27 17:52:50

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

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

  1. WCF客户端-> ASP。. NET ->会话缓存工厂->通道-> WCF服务
  2. WCF客户端-> ASP。NET ->不能存储工厂!->通道-> Azure角色WCF服务
  3. WCF客户端-> ASP。. NET ->每个调用新建通道-> Azure角色WCF服务

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

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

在ASP中缓存WCF ChannelFactory或客户端代理.. NET在Azure上

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

正如你所说的,CacheFactory是不可序列化的,所以你不能把它放到分布式缓存中。

缓存它的一半原因是为了避免CacheFactory的设置时间(可能是10毫秒)。由于CacheFactory的大小相当大,将其序列化到缓存中或从缓存中取出可能比这个时间更长。