繁体   English   中英

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

[英]Caching WCF ChannelFactory or client proxy in ASP.NET on Azure?

正如问题所说。 目前,我们正在将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客户端凭据...

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

正确地说,CacheFactory不可序列化,因此您将无法将其放入分布式缓存中。

缓存的一半原因是避免了CacheFactory的建立时间(可能是10毫秒的毫秒数)。 由于CacheFactory的大小相当大,因此将其序列化进出缓存的时间可能甚至更长。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM