繁体   English   中英

在不使用inprpc或状态服务器的情况下,需要在Web场中的页面刷新之间在ASP.NET中保存数据块

[英]Need to save block of data in ASP.NET between page refreshes in web farm without using inprpc or state server

我有一个运行在服务器场中的asp.net应用程序。 因此,过程中会话已结束。 没有状态服务器。 有一个sql server数据库(不能用于状态服务器)。 没有强制相同的Web服务器服务功能,因此无法保证哪个Web服务器将服务下一页。

我需要在页面之间保存一个数据块(大对象状态)。 我不想使用viewstate,因为数据可能很大,并且不希望它遍历整个网络。 我可以使用数据库来保存数据,并在视图状态下跨线使用记录ID,并检索下一页的数据。

有更好的解决方案吗?

我可以使用数据库来保存数据,并在视图状态下跨线使用记录ID,并检索下一页的数据。

您已经消除了所有其他选择。

好吧,我想您已经排除了大多数选择。 假设您无法安装其他服务,那么我想到了另外两种可能性:

  1. 使用可写文件共享来存储数据。
  2. 允许各个Web服务器相互通信。 例如,将机器的IP或名称作为生成的唯一标识符的一部分; 这样,如果您在回发时到达其他服务器,则该服务器可以调用原始服务器获取其数据。 请注意:如果一台服务器出现故障(或者ASP.NET进程被回收),则所有数据都将丢失。*我希望,无论该主题如何,都不会经常发生。

与在SQL Server版本中一样,不要忘记以某种方式清理数据。 选项1在这方面与SQL Server非常相似,但是对于SQL Server来说,它可能仅仅是集中式清理作业,在文件共享的情况下,问题变为:哪台服务器是中心?

*)当然,您可以尝试从ASP.NET生成辅助进程。 这里的问题变成了:如果该过程有问题怎么办? 默认情况下,它对于您的系统管理员是不可管理的,除非将其设置为可管理。

我不确定我是否阅读正确,但是您不能使用数据库存储asp.net会话吗?

<sessionState
      mode="SQLServer"
      sqlConnectionString="somedb"
      cookieless="AutoDetect"
      timeout="20"
    />

您还可以使用某种分布式缓存解决方案,例如memcached(http://www.danga.com/memcached/) ,它可以在回发之间保留数据。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM