0

我以前听说过在项目中早期使用SqlServer/StateServer,因此当您扩展时,不要陷入使用非可序列化对象InProc的开发人员的陷阱中,并且在迁移到SqlServer/StateServer时会陷入困境后来。为InProc强制执行序列化会话状态访问?

目前我们不需要使用SqlServer会话状态的InProc,因为我们刚刚启动,但我们可能需要快速合理扩展。

在使用InProc时,有没有人在强制实现可序列化对象时有任何建议?也许创造一个包装?

回答

2

重要的是要记住,使用SqlServer/StateServer不仅仅是扩展(Web农场)。即使在一台服务器上,当使用InProc会话时也会遇到问题。基本上,当使用InProc时,当应用程序池回收丢失时,任何“实时”会话。为了说明这一点,您可能正在运行购买渠道,并在会话中存储对流程至关重要的内容(为什么这可能是糟糕的做法是另一次对话)。无论如何,如果会话信息损坏/丢失,那么用户将无法继续。因此,应用程序池会回收并丢失任何当前的实时会话 - 因此,当前处于购买渠道中的任何客户都将退出并可能丢失。

仅仅因为这个原因,我总是推荐至少在本地运行SqlServer会话。更好的架构通常会抵消任何性能问题。如果你碰到性能问题,你可以看看第三方的StateServer实现,我应该更快。

如果在阅读在现场服务器上运行InProc的缺点,你仍然很乐意这样做(他们是你的理由,所以这很好),我唯一可以推荐的是改变你的开发服务器(或测试)使用SqlState运行并离开实时运行InProc。这样您就可以看到环境中没有使用InProc的任何问题,并且可以在非现场环境中修复它们。然后,如果您决定切换Live,则会知道它不需要任何额外的开发工作,所有内容都应该可以。

+0

感谢@Paul的建议。 – 2012-05-03 11:53:47