这是我的问题,我们有一个大的patient对象,它在整个管理过程中的多个屏幕上使用。每个屏幕包含关于同一患者的不同信息。它不可能都在一个屏幕上。
我唯一想要持久化患者的时间是当用户单击save时。我需要在某个地方有一个记忆中的病人。用户可能在管理员中,在各种屏幕上更改患者信息,运行验证,并决定不保存该患者。这是典型的用法。
是否可以将此患者存储在会话中?或者,有没有更好的方法来做到这一点?至多此管理员将有20个用户访问。
发布于 2012-07-14 04:01:34
在这一点上,人们可能会有不同的看法。会话是棘手的,特别是当您使用内存中会话之外的其他东西时。分布式会话将中断不可序列化的对象。如果此对象是一个简单的POCO或您控制的对象,请尽最大努力使其使用序列化。如果是这样的话,你就准备好了。对于一个没有太多负载的管理工具,我会说你会很好。
嘿,我找到了这个--我对这个网站一无所知,但却说明了我的观点:https://www.fortify.com/vulncat/en/vulncat/dotnet/asp_dotnet_bad_practices_non_serializable_object_stored_in_session.html
发布于 2012-07-14 04:01:34
我也有过类似的情况,有相似数量的用户。我这样做了,而且效果很好。
我的情况是关于安排事件。
有人会创建一个事件,并通过多个网页修改和配置此事件。当它们都完成后,它会将所有细节保存到SQL中。最后,我惊讶于它的工作效果如此之好。
发布于 2012-07-14 04:20:46
Session在这里应该没问题。你的用户负载看起来很轻...但您可能想要检查对象究竟占用了多少内存,将其乘以最大用户数,然后查看您所处的位置。
如果希望完全避免会话,可以使用System.Web.Caching存储对象,并使用用户标识符加一些常量字符串对存储的对象设置键。
在这两种情况下,您都需要知道有多少web服务器正在运行应用程序。如果只有一台web服务器,不用担心。如果您有多个web服务器,您需要确保它们是“粘性的”--这样用户就可以保证所有请求都由同一服务器处理。如何做到这一点完全取决于您的负载平衡风格……通常情况下,"IT人员“会为您处理此问题。
https://stackoverflow.com/questions/11477473
复制相似问题