Asp.net mvc 4 Azure虚拟机未持有登录的用户会话

Asp.net mvc 4 Azure虚拟机未持有登录的用户会话,asp.net-mvc-4,azure,claims-based-identity,azure-virtual-machine,stackexchange.redis,Asp.net Mvc 4,Azure,Claims Based Identity,Azure Virtual Machine,Stackexchange.redis,我正在开发一个MVC4应用程序。我们已经在Windows Azure IAAS模型上托管了我们的应用程序。现在,我们已经配置了2台虚拟机,一切正常。但是我们在维护用户登录时遇到了一个问题 如果我登录到虚拟机1,当下一个请求来自虚拟机2时,它不会继续。我们已经通过负载平衡映射了两个虚拟机 我应该研究缓存解决方案吗。任何输入都将非常有用 谢谢, Jaswanth您遇到了两个完全独立的虚拟机(是的,负载平衡,但是独立的)。这就要求需要在虚拟机外部存储任何类型的会话数据(或者需要同步会话内容并使其在两个

我正在开发一个MVC4应用程序。我们已经在Windows Azure IAAS模型上托管了我们的应用程序。现在,我们已经配置了2台虚拟机,一切正常。但是我们在维护用户登录时遇到了一个问题

如果我登录到虚拟机1,当下一个请求来自虚拟机2时,它不会继续。我们已经通过负载平衡映射了两个虚拟机

我应该研究缓存解决方案吗。任何输入都将非常有用

谢谢,
Jaswanth

您遇到了两个完全独立的虚拟机(是的,负载平衡,但是独立的)。这就要求需要在虚拟机外部存储任何类型的会话数据(或者需要同步会话内容并使其在两个虚拟机中完全相同)

Azure不会为您同步会话数据。这取决于您,将其构建到应用程序的体系结构中。您提到了缓存,这当然是一个可行的解决方案(不过,您选择哪一个取决于您自己)。还有其他解决方案,例如基于数据库的会话存储。再说一遍,这取决于你


但底线是:如果您要以负载平衡的方式将应用程序扩展到单个服务器(在本例中为VM)之外,则无法在特定VM中存储会话数据。

使用持久会话状态存储(如Redis或SQL server等),或将状态放在cookie中,并在每个请求中读取/写入。如果cookie包含敏感内容,请对其进行加密。

我使用的是基于身份声明的身份验证。那么,我是否需要将该对象添加到Redis缓存密钥中并检索它(如果它存在)?我对azure上的缓存机制非常陌生。身份与会话有什么关系?@erik你能提出解决方案吗???@Jaswanthrishna-我已经提过了,但你没有对此发表评论。@erik funkebusch-问题是……我正在使用wif授权用户……它在单台机器上运行得很好……现在我有两台机器……如果我登录一台机器……安全令牌或授权不会结转。。。所以我需要在分布式缓存上维护它…这就是我被卡住的地方…我在使用WIF,我想使用Redis。你能分享更多信息吗?…好的,然后使用RedisSessionStateProvider设置并获取与会话关联的会话状态(WIF声明)。此外,如果您不使用ASP.Net会话提供程序,则需要直接管理获取和设置缓存值,在本例中,请使用Redis CacheSharp之类的库。你能解释一下关于cachesharp的一些情况吗?当然这里有一些链接-----你确定你的机器密钥在两台服务器上都是相同的吗?否则,用于加密身份cookie的加密将无法在另一台服务器上解密。@Erik Funkenbusch:是的,它成功了,非常感谢Erik。我不知道我怎么会错过那个部分…有点误会了