【问题标题】:How can we change session state of a website from one state to another我们如何将网站的会话状态从一种状态更改为另一种状态
【发布时间】:2012-04-10 21:14:23
【问题描述】:

基本上我的问题是我有一个大约在 3 年前开发的网站,而开发时建议该网站将被互联网上的少数人使用。

但现在似乎有很多用户正在访问该网站。因此,我们计划创建一个 Web 服务器农场,其中我们有多个服务器用于我们的网站。

开发中的主要问题是旧网站使用了InProc 会话状态,现在由于我们要升级到多个服务器,我们想将InProc 更改为Outproc,即StateServer 会话状态。

您能否指导我进行此升级以及如何以简单易行的方式实现升级,而不是在使用会话时更改每个页面上的编码。

【问题讨论】:

  • 你的意思是你设置了一个 SQL 来保持会话状态,对吧?
  • 是的,它可以是 SQLServer 或 StateServer,任何一个都更有效。我很困惑@MassimilianoPeluso 回答他对序列化意味着什么?
  • 这就是 MSDN 所说的:如果模式设置为 StateServer,则存储在会话状态中的对象必须是可序列化的。有关可序列化对象的信息,请参阅 SerializableAttribute 类。
  • 我不知道 ether :) 当您“序列化”并以这种方式保存数据时使用可序列化,与您实际要求的无关。

标签: asp.net session-state inproc session-state-server


【解决方案1】:

您将在此处将您的网站移动到许多 Web 服务器,而这里的实际问题是“如何为每个用户保持与服务器有关的相同状态”。

有两种选择。

第一个选项是设置将用户拆分到服务器的路由器,使用“粘性选项”,这意味着每个用户都坚持他的会话到一个服务器,并且只有一个。在这种情况下,使用 inproc 或 sql server session 无关紧要,只要路由器做好。这当然是您不使用任何其他数据库来存储公共数据的情况。

第二个选项是使用sql server并将会话移动到服务器,但这里服务器必须在一个服务器上,其他服务器从这个服务器获取他的会话数据。您还可以在 web.config 上为所有 Web 服务器设置相同的密钥机器。

所以对于这种情况,你需要。

  1. 在一台服务器上设置公共/共享 SQL 服务器
  2. 要在此安装会话数据库(实际上是从 asp.net 运行脚本)
  3. 设置 web.config 以将此数据库用作会话
  4. 将 web.config 设置为具有相同的机器密钥。

如果您将数据库用于其他数据,则将此数据库与会话数据库放在一起,并共享连接到该数据库。这里的重点是数据必须在一台计算机上实时,其他计算机连接到这台主计算机以获取数据。

【讨论】:

  • 这很清楚!但我想问你那些已经创建的会话怎么样。如果我在web.config 中进行此更改,我当前的代码行会出错吗?
  • @Murtaza 所有准备就绪的会话都将丢失,并将创建新的会话。不,无论您使用何种媒体,会话都在正常工作
  • 这真是令人兴奋的答案......非常感谢。希望这对很多人有用
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-06-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多