ASP.NET中实现Session的负载均衡
据我目前所知有2种方法,如下:
1、利用微软提供的解决方案

参考网址:http://blog.maartenballiauw.be/post/2008/01/23/ASPNET-Session-State-Partitioning.aspx
2、利用第三方组件,比如:Memcached
我们排除第二种方法,只说第一种方法。
在ASP.NET中Session的存储方式有3种:
1、IIS进程
2、ASP.NET State Service服务
3、SqlServer数据库
好,我们来分析一下,将Session放入IIS进程肯定是不行的,将Session放入SqlServer数据库中性能方面可能大打折扣,最好是放在ASP.NET State Service中。
下面说一下步骤:
1、在命令行键入services.msc打开服务窗口,开启ASP.NET State Service,仅仅这样还不行,还需要在注册表修改HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\aspnet_state\Parameters\AllowRemoteConnection的值,改为1即可。
2、新建解决方案MySession,里面包含一个Web项目:MySession和一个类库:App

3、在类库下面新建一类文件:PartitionResolver.cs,内容为:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text; namespace App
{
public class PartitionResolver : System.Web.IPartitionResolver
{
#region Private members private String[] partitions; #endregion #region IPartitionResolver Members public void Initialize()
{
// Create an array containing
// all partition connection strings
//
// Note that this could also be an array
// of SQL server connection strings!
partitions = new String[] {
"tcpip=192.168.1.17:42424",
"tcpip=192.168.1.18:42424"
};
} public string ResolvePartition(object key)
{
// Accept incoming session identifier
// which looks similar like "2ywbtzez3eqxut45ukyzq3qp"
string sessionId = key as string; // Create your own manner to divide session id's
// across available partitions or simply use this one!
int partitionID = Math.Abs(sessionId.GetHashCode()) % partitions.Length;
return partitions[partitionID];
} #endregion
}
}
注意:可能需要引用System.Web,而且服务器IP列表自行斟酌修改,端口保持不变
4、在MySession Web项目中引用类库App
5、在MySession Web项目中的Web.config的<system.web>节点里面添加<sessionState mode="StateServer" partitionResolverType="App.PartitionResolver"/>
6、新建Default.aspx页面,cs代码如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls; namespace MySession
{
public partial class Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (Session["test"] == null)
{
Session["test"] = "Test";
}
Response.Write(Session["test"]);
}
}
}
7、新建ShowSession.aspx页面,cs代码如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls; namespace MySession
{
public partial class ShowSession : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
Response.Write(Session["test"]);
}
}
}
按照我说的来,应该是没有问题的。简单吧?
而且还支持同一个顶级域名的跨域访问,不信自己试试。
如果有多台Web服务器,到时候可能还要注意machineKey
ASP.NET中实现Session的负载均衡的更多相关文章
- 【转】asp.net中利用session对象传递、共享数据[session用法]
来自:http://blog.unvs.cn/archives/session-transfer-method.html 下面介绍Asp.net中利用session对象传递.共享数据用法: 1.传递值 ...
- asp.net中利用session对象传递、共享数据[session用法]
下面介绍Asp.net中利用session对象传递.共享数据用法: 1.传递值: 首先定义将一个文本值或单独一个值赋予session,如下: session[“name”]=textbox1.text ...
- 解决docker中使用nginx做负载均衡时并发过高时的一些问题
# 解决docker中使用nginx做负载均衡时并发过高时的一些问题 1.问题产生原因: 由于通过nginx作为负载均衡服务,在访问并发数量达到一定量级时jmeter报错. nginx日志关键信息:a ...
- 【转载】解决k8s中的长连接负载均衡问题
原文链接:一流铲屎官二流程序员[解决k8s中的长连接负载均衡问题] 长连接与短连接: 简介 长连接是指在一个TCP连接上可以连续发送多个数据包,在TCP连接保持期间,如果没有数据包发送,需要双方发检测 ...
- asp.net core 实战之 redis 负载均衡和"高可用"实现
1.概述 分布式系统缓存已经变得不可或缺,本文主要阐述如何实现redis主从复制集群的负载均衡,以及 redis的"高可用"实现, 呵呵双引号的"高可用"并不是 ...
- ASP.NET中的Session怎么正确使用
Session对象用于存储从一个用户开始访问某个特定的aspx的页面起,到用户离开为止,特定的用户会话所需要的信息.用户在应用程序的页面切换时,Session对象的变量不会被清除. 对于一个Web应用 ...
- ASP.NET中的Session怎么正确使用[转]
Session对象用于存储从一个用户开始访问某个特定的aspx的页面起,到用户离开为止,特定的用户会话所需要的信息.用户在应用程序的页面切换时,Session对象的变量不会被清除. 对于一个Web应用 ...
- 【译文】漫谈ASP.NET中的Session
最近这两天被一个Web Farm环境下的Session处理问题虐得很痛苦,网上到处找解决方案,在无意中翻看到这篇文章,感觉很不错,顺手查了一下,貌似没有现成的译文,于是一咬牙一跺脚把这篇文章翻译出来了 ...
- ASP.NET 中的 Session 怎么正确使用
Session对象用于存储从一个用户开始访问某个特定的aspx的页面起,到用户离开为止,特定的用户会话所需要的信息.用户在应用程序的页面切换时,Session对象的变量不会被清除. 对于一个Web应用 ...
随机推荐
- android apk 防止反编译技术第四篇-对抗JD-GUI
又到周末一个人侘在家里无事可干,这就是程序员的悲哀啊.好了我们利用周末的时间继续介绍android apk防止反编译技术的另一种方法.前三篇我们讲了加壳技术(http://my.oschina.net ...
- [转]pyhon之Tkinter实例化学习
本文转自:http://www.cnblogs.com/kaituorensheng/p/3287652.html 阅读目录 1. 产品介绍 2. 设计规划 3. 相关知识 4. 源码附件 Tkint ...
- 《Inside UE4》-2-GamePlay架构(一)Actor和Component
<Inside UE4>-2-GamePlay架构(一)Actor和Component <Inside UE4>-2-GamePlay架构(一)Actor和Compon ...
- BUCK-BOOST反激变压器设计
Buck-Boost电路中,最低电压为其最恶劣情况 以下图为例: 注:1.Np为初级绕组匝数,Ns为次级绕组匝数: 2.Vmos为MOS最大耐压值,1为整流管压降,Vl为漏,Vl=100V,Vmos选 ...
- 3-2-1-0-GO
正式开始第3份工作,入职第2天,午饭后与Team Leader谈了1个多小时,很有收获. 首先,不同的公司有不同的企业文化和规章制度,需要尊重且入乡随俗,尽快学习并适应,争取早日融入公司和团队当中去, ...
- using关键字的使用
using语句的两个作用: 1)using可以导入命名空间 2)using可以释放对象占用的内存资源. 代码如下: using (SqlConnection con=new SqlConnection ...
- extra增强延迟加载
这种配置和配置为lazy=true是一样的,但它的好处在于调用size/contains等方法时,并不查询整个集合的数据,而是发送一条sql语句来处理,只有真正在使用时才全部去查询整个集合
- Qt 静态编译后的exe太大, 可以这样压缩.
1. 下载PECompact 下载地址:http://download.csdn.net/download/sniper_bing/7669247 , 不行大家就去baidu搜索下载就可以了这个是绿 ...
- Java线上应用故障排查之二:高内存占用
搞Java开发的,经常会碰到下面两种异常: 1.java.lang.OutOfMemoryError: PermGen space 2.java.lang.OutOfMemoryError: Java ...
- h5中websocket
ajax的数据传输是单向的,客户端和服务端没有连接-----客户端建立连接发送请求----服务器端沿着建立的连接返回相应----断开连接 websocket则是可以在客户端和服务器端进行双向的数据接收 ...