2009-08-20 179 views
4

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

我们的客户让我们的网站长达数小时 - 有时甚至几天。我担心的是,当我们进行切换时,突然间所有他们的视图状态将无法验证,因为MachineKey已经改变。

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

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

回答

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

你是对的,移动会使所有授权Cookies无效。我相信,除非你开启了viewstate加密,否则viewstate会没事的。

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

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

2

通常这样的迁移将是一个完全中断。大多数网站都宣布了这一点,并在转换过程中放置​​了一个临时中断页面。另外,我想有一段时间这两台机器都不可用,所以无论机器密钥和视图状态如何,请求都会失败。我会建议你强制完全停机。这也可以让你在新服务器上线之前测试它。

或者,您可以为新机器提供新的IP,并缓慢强制新流量流向新流量,而现有连接将保留在旧流量上。这需要某种设备(路由器,内容交换机等)来管理。不知道你的服务器是否在这样的设备后面。

但回到你的问题,是的,你可以手动设置机器的关键。这在machine.config中。从你的旧机器拿这个部分,并复制过来:

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

它通常设在这里: C:\ WINDOWS \ Microsoft.NET \框架\ V2.0.50727 \ CONFIG \ machine.config中

这里是一篇关于使用same machine Key的文章。

+0

感谢你 - 这对我来说,设置关键现在只会让我担心的问题更快发生。也就是说,迁移将会很顺利,但现有服务器上的请求会失败。 – n8wrl 2009-08-20 18:06:22

2

您可以明确地设置machineKey,事实上,当您在Web场中使用不同的会话状态模型时,通常会执行此操作。 Here's a link关于如何操作(靠近文章底部)。

不幸的是,如果您尚未手动生成当前machineKey,那么每次应用程序域重新启动时都会随机生成(这意味着如果您的服务器已经打开,您现在容易受到验证问题的影响)。

但是,你会发现目前的machineKey正在使用由

HKU \ SID \软件\微软\ ASP.NET \ 2.0.50727寻找在注册表中。0

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