ASP.NET2.0下实现分布式StateServer(状态服务器)

本文介绍ASP.NET 2.0中通过配置SessionState及实现自定义PartitionResolver类来实现状态服务器的负载均衡策略。此外还讨论了自定义sessionModule的方法,包括使用MemCached或.NET Remoting实现SessionStore。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

在一个asp.net1.x时代,我们一个站点的状态服务器(或者叫会话服务器),最多只能有一台,一台服务器在中小型网站下问题还不大,一旦网站到了一定的规模,状态服务器会压力很大。asp.net从2.0开始就对状态服务提供了基于Hash的负载均衡策略。下面具体谈一下这种策略的实现方式。
一、配置文件:

修改SessionState配置节
<SessionState    
                    mode="StateServer"
           timeout="20"
            partitionResolverType=
                "mySessionState.PartitionResolver" />
   

增加多个SessionState的地址
<appSettings>

    <add key="StateServers" value="tcpip=192.168.10.1:42424,tcpip=192.168.10.2:42424"/>
   </appSettings>

二、实现一个partitionResolver类来支持分布式
这里的PartitionResolver类就是SessionState配置节的   partitionResolverType= "mySessionState.PartitionResolver"
asp.net的状态管理模块会自动调用该类的ResolvePartition方法,来找到当前的Session应该访问那台状态服务器,就不多说了 ,看看代码一切就都明白了!
public class PartitionResolver : System.Web.IPartitionResolver  
    {
        private String[] partitions;

        public void Initialize ( )
        {
            // create the partition connection string table  
            partitions =AppSetting.StateServerList.Split( new char[]{','} );
        }

        public String ResolvePartition ( Object key )
        {
            String sid =key as string;

            // hash the incoming session ID into  
            // one of the available partitions

            int partitionID = Math.Abs( sid.GetHashCode() ) % partitions.Length;

            return partitions[partitionID];
        }  

    }

另外除了使用以上微软的的策略,你还可以实现自定义的session Module,这个时候状态服务器就可以任意选择了,你可以选择开源的MemCached,或者用.NET Remoting自己实现一个Session Store

使用方法: 先附加DB_51aspx文件夹里面数据库到你的mssql 2000当中,用VS2005打开,修改web.config中的数据库配置: 这里改你的数据库用户名及密码 ,运行!OK! 后台路径为:admin/login.aspx 用户名 、密码为51aspx 采用多层分布式架构 -------WEB-------- 表示层,负责应用程序的表现形式、用户体验等。 -------Common------- 公共函数类,字符截取、验证用户输入信息等功能。一般被表示层调用。 -------BLL------ 处理应用程序的业务逻辑,被表示层调用。 -------DALFactory----- 抽象工厂,用于创建各种数据对象的方法,这里有配置文件和反射的运用。 -------Model------- Model程序集,存放实体类,用于数据访问层和逻辑层调用 -------IDAL-------- 数据操作接口,数据访问层实现其接口并重写它(体现了面向接口的编程思想)。 -------Sqlserver---- 数据访问层,实现具体的select、update、delete....操作,重写IDAL接口。 -------DBUtility---- 数据访问类组件,这里使用的是SqlHelper 注:这是我参考一些多层架构的资料结合对多层的理解写的一个demo,用了两天时间,可能不是很标准,大家看的时候,有什么意见多多交流,一起探讨.分页那里还有点bug,不过我想以后再改进了(分页封装到数据层我总觉得不好),前台部分没有用控件(貌似一个高手告诉我,如果哪天你做.net不用控件了,你就可以了,汗一下!我就索性试一试。^_^)。有什么不合理的地方,欢迎提出来,我们一起学习,一起交流。 作者:李平
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值