1

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

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

有更好的解决方案吗?

4

3 回答 3

4

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

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

于 2009-08-11T21:28:58.833 回答
1

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

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

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

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

于 2009-08-11T21:34:47.260 回答
0

我不确定我是否没看错,但你能不使用数据库来存储 asp.net 会话吗?

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

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

于 2009-08-11T21:39:13.197 回答