6

对此的任何建议将不胜感激,我整个上午都在研究,但我仍在摸不着头脑。几周前我开始在一家新公司工作,我是唯一的 .NET 开发人员,因为开发最初是由一家外包公司完成的,我被要求进行研究。我对现有系统的了解非常有限,但据我所知,情况如下。

我们想在 asp.net 网站上启用粘性会话。根据我收集的研究,我需要执行以下步骤。我们正在使用 ASP.NET 状态服务

该设置是一个负载平衡服务器,它为两个 Web 服务器提供服务。

  1. 确保两个 Web 服务器具有相同的机器密钥。
  2. 确保网站在部署前已经预编译。用于通过 ASP.NET 状态服务对对象进行序列化。
  3. 确保 iis 元数据库上的应用程序路径在两个 Web 服务器上相同。

我缺乏的一点知识是会话存储在哪里。会话是否存储在负载均衡器上,它们可以存储在负载均衡器上吗?根据我的阅读,它们由 ASP.NET 状态服务存储,如果服务在负载平衡器上运行,因此会话存储在负载平衡器上。

据我了解,ASP.NET 状态服务在每台 Web 服务器上运行,它们只是相互通信,以便会话存储在两台服务器上。我假设他们这样做的方式是基于所使用的算法类型。任何信息将不胜感激。

4

2 回答 2

8

zeencat,请查看状态服务器模式部分的http://msdn.microsoft.com/en-us/library/ms178586.aspx :

StateServer 模式将会话状态存储在一个进程中,称为 ASP.NET 状态服务,它独立于 ASP.NET 工作进程或 IIS 应用程序池。使用此模式可确保在重新启动 Web 应用程序时保留会话状态,并且还使会话状态可用于 Web 场中的多个 Web 服务器。要使用 StateServer 模式,您必须首先确保 ASP.NET 状态服务正在用于会话存储的服务器上运行。ASP.NET 状态服务在安装ASP.NET 和 .NET Framework 时作为服务安装。

据我了解,ASP.Net 状态服务在一台服务器上运行,作为一种名为ASP.NET 状态服务的服务,两台服务器将具有相同的 web.config 文件:

<configuration>
  <system.web>
    <sessionState mode="StateServer"
      stateConnectionString="tcpip=SampleStateServer:42424"
      cookieless="false"
      timeout="20"/>
  </system.web>
</configuration>

这样,会话将存储在托管服务的服务器上。

希望能帮助到你, []

于 2013-09-11T12:49:49.887 回答
1

如果您在 AWS 中,也请考虑使用 ElastiCache;如果在本地作为您的 ASP.NET 会话存储,请考虑使用 Redis,而不是使用粘性会话。它在自动缩放、负载平衡和性能方面具有更多优势。更多信息请访问http://blogs.msdn.com/b/webdev/archive/2014/05/12/announcing-asp-net-session-state-provider-for-redis-preview-release.aspx

于 2016-01-19T15:08:50.600 回答