4

我们有一个长期存在的 ASP.NET 3.5 应用程序,我们正在从运行 Windows 2005+IIS 6 的物理服务器转移到运行 Windows 2008+IIS7 的虚拟服务器。新机器将采用旧机器的标识 - IP、DNS 等。

我们的客户使我们的网站保持运行数小时 - 有时甚至数天。我担心的是,当我们进行这种切换时,突然间所有的视图状态都将无法验证,因为 MachineKey 会发生变化。

这种破坏是可以避免的吗?我可以将新服务器的 machineKey 设置为与现在使用的相同吗?我认为它是自动生成的 - 我可以找出它是什么吗?

或者,这是否值得 - 这是一个糟糕的情况,用户不应该期望能够长时间访问一个网站?

4

3 回答 3

4
<system.web>
    <machineKey validationKey="Generate on your own" decryptionKey="Generate on your own" validation="3DES"/>
</system.web>

您是对的,移动将使所有授权 Cookie 无效。我相信,除非您打开了视图状态加密,否则视图状态会很好。

如果添加 machinekey 属性,那么站点托管在哪里并不重要,只要该机器密钥相同,加密和解密就可以了。此外,如果您的站点托管在负载平衡环境中,您将需要/应该使用它。

msdn.microsoft.com/en-us/library/ms998288.aspx

于 2009-08-20T17:41:28.137 回答
2

通常,像这样的迁移将完全中断。大多数网站都会宣布这一点,并在切换期间放置一个临时中断页面。另外,我想会有一段时间两台机器都不可用,所以不管机器键和视图状态如何,请求都会失败。我建议您强制完全中断。这也将允许您在新服务器上线之前对其进行测试。

或者,您可以为新机器分配新 IP,然后慢慢地将新流量强制到新机器,而现有连接将保留在旧机器上。这将需要某种设备(路由器、内容交换机等)来管理它。不确定您的服务器是否在这样的设备后面。

但回到你的问题,是的,你可以手动设置机器密钥。这是在 machine.config 中。从您的旧机器中获取此部分并将其复制:

<machineKey  
validationKey="..."           
decryptionKey="..."
...
/>

它通常位于:C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\CONFIG\machine.config

这是一篇关于使用同一台机器 Key的文章。

于 2009-08-20T17:41:57.747 回答
2

您可以显式设置 machineKey,事实上,当您在网络农场中使用不同的会话状态模型时,这很常见。 这是有关如何操作的链接(靠近文章底部)。

不幸的是,如果您还没有手动生成当前的 machineKey,那么它将在每次应用程序域重新启动时随机生成(这意味着如果您的服务器出现故障,您现在很容易受到验证问题的影响)。

但是,您可以通过在注册表中查找当前正在使用的 machineKey

HKU\SID\Software\Microsoft\ASP.NET\2.0.50727.0

(如果您使用的是 IIS6)。如果你小心的话,你也许可以用相同的密钥设置新的盒子,迁移过来,并且没有任何问题。但这些都是著名的遗言;)

于 2009-08-20T17:50:37.383 回答