一起谈.NET技术,负载均衡服务器Session共享的解决方案

  在ASP.NET的程序中要使用Session对象时,必须确保页面的@page指令中EnableSessionState属性是True或者 Readonly,并且在web.config文件中正确的设置了SessionState属性。

  ASP.NET中Session的状态保持是由web.config文件中的标记下的标记的mode属性来决定的。该属性有四种可能的值:Off、Inproc、StateServer和SQlServer。

  设为Off会禁用Session。

  Inproc是缺省的设置,这种模式和以前的ASP的会话状态的方法是类似的,会话的状态会被保存在ASP.NET进程中,它的优点是显而易见的:性能。进程内的数据访问自然会比夸进程的访问快。然而,这种方法Session的状态依赖于ASP.NET进程,当IIS进程崩溃或者正常重起启时,保存在进程中的状态将丢失。

  为了克服Inproc模式的缺点,ASP.NET提供了两种进程外保持会话状态的方法。

  ASP.NET首先提供了提供了一个Windows服务:ASPState,这个服务启动后,ASP.NET应用程序可以将mode属性设置为 “SateServer”,来使用这个Windows服务提供的状态管理方法。

  除了在web.config文件中设置mode属性为StateServer外,还必须设置运行StateServer服务器的IP地址和端口号。

  1、如果在IIS所在的机器运行StateServer则IP地址就是127.0.0.1,端口号通常是42424.配置如下:

  mode=”StateServer”

  stateConnectionString="tcpip=127.0.0.1:42424"

  2、找一台服务器作为Session服务器(如IP为:192.168.1.244),启动其Windows中的ASP.NET State Service(默认的端口号为42424),把启动类型改为自动;
  3、修改Session服务器注册表中的项 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services \aspnet_state\Parameters中的AllowRemoteConnection 键的值为1,其中的Port键控制ASP.NET State Service的监听端口;修改后需要重启ASP.NET State Service才生效;

  4、每台服务器的web.config 的stateConnectionString都指向这台服务器。

  使用这种模式,会话状态的存储将不依赖IIS进程的失败或者重启,会话的状态将存储在StateServer进程的内存空间中。

  另一种会话状态模式是SQLServer模式。这种模式是将会话的状态保存在SQL Server数据库中的。使用这种模式前,必须至少有一台SQL Server服务器,并在服务器中建立需要的表和存储过程。.NET SDK提供了两个脚本来简化这个工作:InstallSqlState.sql和UnInstallSqlState.sql。这两个文件存放在下面路径中:

  system drive\WINNT\Microsoft.NET\Framework\version\

  要配置SQL Server 服务器,可以在命令行中运行SQL Server提供的命令行工具osql.exe

  osql -s [server name] -u [user] -p [password]

  例如:

  osql -s (local) -u as -p “”-i InstallSqlState.sql

  做好必要的数据库准备工作后,将web.config文件中的sessionstate元素的mode属性改为”sqlserver”,并指定 SQL连接字符串。具体如下:

  mode="SQLServer"

  sqlConnectionString="data source=127.0.0.1;userid=sa;password=;Trusted_Connection=yes"

  使用SQLServer模式处了可以使Session的状态不依赖于IIS服务器之外,还可以利用SQL Server的集群,使状态存储不依赖于单个的SQL Server,这样就可以为应用程序提供极大的可靠性。

时间: 2024-10-24 21:59:41

一起谈.NET技术,负载均衡服务器Session共享的解决方案的相关文章

负载均衡服务器Session共享的解决方案

在ASP.NET的程序中要使用Session对象时,必须确保页面的@page指令中EnableSessionState属性是True或者 Readonly,并且在web.config文件中正确的设置了SessionState属性. ASP.NET中Session的状态保持是由web.config文件中的标记下的标记的mode属性来决定的.该属性有四种可能的值:Off.Inproc.StateServer和SQlServer. 设为Off会禁用Session. Inproc是缺省的设置,这种模式和

Nginx和Tomcat负载均衡实现session共享(转)

    以前的项目使用Nginx作为反向代理实现了多个Tomcat的负载均衡,为了实现多个Tomcat之间的session共享,使用了开源的Memcached-Session-Manager框架.     此框架的优势:          1.支持Tomcat6和Tomcat7           2.操作粘性或不黏性Session           3.没有单点故障           4.Tomcat的故障转移           5.Memcached的故障转移           6.

浅谈sqlserver的负载均衡问题_MsSql

截至到SQL Server 2008 R2 版本,微软还是没有推出官方的负载均衡组件,只能通过SQL Server的其他技术特性或者利用第三方组件来DIY. 在以前的文章中,小编也总结了一些常见的"sqlserver集群""sqlserver数据同步""sqlserver故障转移"...等相关的实现技巧.今天就不仔细讲解了. 今天想推荐大家尝试使用第三方的组件和工具,典型的就是一款ICX数据库路由.当然,我和这些工具的厂商也不熟,所以本文显然不是

C#开发负载均衡服务器实例

思路 负载均衡服务器最出名的当数 Nginx了.Nginx服务器通过异步的方式把连接转发给内网和N个服务器,用来分解单台应用服务器的压力,了解了原理及场景后,用C#来实现一个.思路如下: 1. 使用一个站点的 Application_BeginRequest 来接收连接,转发连接. 2. 对各类静态资源做单独处理,(可转可不转) 3. 可以转发Get,Post,异步转发. 4. 对指定的请求,转发到同一台服务器,保持使用者的登录状态. 实现 Vs2015建一个Mvc建站: localhost:1

浅谈sqlserver的负载均衡问题

截至到SQL Server 2008 R2 版本,微软还是没有推出官方的负载均衡组件,只能通过SQL Server的其他技术特性或者利用第三方组件来DIY. 在以前的文章中,小编也总结了一些常见的"sqlserver集群""sqlserver数据同步""sqlserver故障转移"...等相关的实现技巧.今天就不仔细讲解了. 今天想推荐大家尝试使用第三方的组件和工具,典型的就是一款ICX数据库路由.当然,我和这些工具的厂商也不熟,所以本文显然不是

tomcat集群-为什么apache+tomcat搭建的负载均衡服务器集群在部署项目访问请求获取不到数据

问题描述 为什么apache+tomcat搭建的负载均衡服务器集群在部署项目访问请求获取不到数据 为什么apache+tomcat搭建的负载均衡服务器集群在部署项目后的项目路径不对呢,请求获取不到数据我是将项目设置在tomcat的根目录访问路径,输入localhost:8080即可访问到项目的首页,显示正常.Apache弄的是IP访问嘛,通过控制分配请求给集群下的tomcat服务器来访问项目,但是直接使用IP访问请求都获取不到数据,尝试通过IP/项目名也达不到效果.这是什么原因呢. 我当时是按照

centos下配置Nginx反向代理负载均衡服务器教程

准备: Proxy-Server:1.1.1.22(负载均衡服务器) Nginx-Server23:1.1.1.23(web23) Nginx-Server24:1.1.1.24(web24) 环境版本: Linux Nginx-Proxy 2.6.32-358.el6.x86_64 #1 SMP Fri Feb 22 00:31:26 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux ①:安装配置完成Nginx WEB服务器预配置: [root@Nginx-Ser

如何使用 Weave 以及 Docker 搭建 Nginx 反向代理/负载均衡服务器

Hi, 今天我们将会学习如何使用 Weave 和 Docker 搭建 Nginx 的反向代理/负载均衡服务器.Weave 可以创建一个虚拟网络将 Docker 容器彼此连接在一起,支持跨主机部署及自动发现.它可以让我们更加专注于应用的开发,而不是基础架构.Weave 提供了一个如此棒的环境,仿佛它的所有容器都属于同个网络,不需要端口/映射/连接等的配置.容器中的应用提供的服务在 weave 网络中可以轻易地被外部世界访问,不论你的容器运行在哪里.在这个教程里我们将会使用 weave 快速并且简单

服务器-session共享?天猫淘宝不用重复登录

问题描述 session共享?天猫淘宝不用重复登录 为什么在淘宝登录后,转到天猫上不用在登录?他们的ip是不一样的,服务器不是应该是两台么,是怎么做到seeion共享的,难道是登录后往本地写了文件?求大牛解释啊!! 解决方案 seeion内容是保存在淘宝的服务器上的,你的浏览器只来保存了一个sessionid,而且是使用cookied的保存的.当你第一次连接淘宝服务器 时,服务器的返回就包含一个sessionid,然后你的浏览器保存下来.每次跳转在淘宝的网页上,都会把这个sessionid传给服