据我目前所知有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的负载均衡的更多相关文章

  1. 【转】asp.net中利用session对象传递、共享数据[session用法]

    来自:http://blog.unvs.cn/archives/session-transfer-method.html 下面介绍Asp.net中利用session对象传递.共享数据用法: 1.传递值 ...

  2. asp.net中利用session对象传递、共享数据[session用法]

    下面介绍Asp.net中利用session对象传递.共享数据用法: 1.传递值: 首先定义将一个文本值或单独一个值赋予session,如下: session[“name”]=textbox1.text ...

  3. 解决docker中使用nginx做负载均衡时并发过高时的一些问题

    # 解决docker中使用nginx做负载均衡时并发过高时的一些问题 1.问题产生原因: 由于通过nginx作为负载均衡服务,在访问并发数量达到一定量级时jmeter报错. nginx日志关键信息:a ...

  4. 【转载】解决k8s中的长连接负载均衡问题

    原文链接:一流铲屎官二流程序员[解决k8s中的长连接负载均衡问题] 长连接与短连接: 简介 长连接是指在一个TCP连接上可以连续发送多个数据包,在TCP连接保持期间,如果没有数据包发送,需要双方发检测 ...

  5. asp.net core 实战之 redis 负载均衡和"高可用"实现

    1.概述 分布式系统缓存已经变得不可或缺,本文主要阐述如何实现redis主从复制集群的负载均衡,以及 redis的"高可用"实现, 呵呵双引号的"高可用"并不是 ...

  6. ASP.NET中的Session怎么正确使用

    Session对象用于存储从一个用户开始访问某个特定的aspx的页面起,到用户离开为止,特定的用户会话所需要的信息.用户在应用程序的页面切换时,Session对象的变量不会被清除. 对于一个Web应用 ...

  7. ASP.NET中的Session怎么正确使用[转]

    Session对象用于存储从一个用户开始访问某个特定的aspx的页面起,到用户离开为止,特定的用户会话所需要的信息.用户在应用程序的页面切换时,Session对象的变量不会被清除. 对于一个Web应用 ...

  8. 【译文】漫谈ASP.NET中的Session

    最近这两天被一个Web Farm环境下的Session处理问题虐得很痛苦,网上到处找解决方案,在无意中翻看到这篇文章,感觉很不错,顺手查了一下,貌似没有现成的译文,于是一咬牙一跺脚把这篇文章翻译出来了 ...

  9. ASP.NET 中的 Session 怎么正确使用

    Session对象用于存储从一个用户开始访问某个特定的aspx的页面起,到用户离开为止,特定的用户会话所需要的信息.用户在应用程序的页面切换时,Session对象的变量不会被清除. 对于一个Web应用 ...

随机推荐

  1. linux线程同步(3)-读写锁

    一.概述                                                    读写锁与互斥量的功能类似,对临界区的共享资源进行保护!互斥量一次只让一个线程进入临界区, ...

  2. Scala编程第二课

    函数式编程 函数式编程,结构化编程,OO编程都是编程的方法论. 函数式编程主要思想是把运算过程尽量写成一系列嵌套的函数调用. 特点如下: 1.函数可以像其他数据类型一样使用 可以可以赋值给其他变量,可 ...

  3. vi/vim实用命令

    查找 n是下一个,N是上一个 撤销和重做 u:撤销上一步的操作 ctrl+r:恢复上一步被撤销的操作 替换 :1,$ s/aaa/bbb/g

  4. 石子合并[DP-N3]

    题目描述 在一个园形操场的四周摆放N堆石子,现要将石子有次序地合并成一堆.规定每次只能选相邻的2堆合并成新的一堆,并将新的一堆的石子数,记为该次合并的得分. 试设计出1个算法,计算出将N堆石子合并成1 ...

  5. Eclipse启动时选择workspace设置

    由于一直习惯eclipse中只使用一个工作空间,所以一般在eclipse刚刚安装好后第一次启动时,我就钩上了弹出的工作空间选择的对话框中以后不再提示的钩选. 结果这次突然需要用到它的工作空间提示功能了 ...

  6. Eclipse自动打开实现类原型的工具

    http://eclipse-tools.sourceforge.net/implementors/ I always use this implementors plugin to find all ...

  7. Android之监听手机软键盘弹起与关闭

    背景: 在很多App开发过程中需要在Activity中监听Android设备的软键盘弹起与关闭,但是Android似乎没有提供相关的的监听API给我们来调用,本文提供了一个可行的办法来监听软键盘的弹起 ...

  8. javascript中获取屏幕尺寸

    Javascript获取获取屏幕.浏览器窗口 ,浏览器,网页高度.宽度的大小 屏幕的有效宽:window.screen.availHeight屏幕的有效高:window.screen.availWid ...

  9. MySQL 的乐观并发控制Optimistic concurrency control

    默认情况下, MySQL的Innodb事务隔离级别是重复读 repeatable read, SELECT @@GLOBAL.tx_isolation, @@tx_isolation;REPEATAB ...

  10. js Dialog 去掉右上角的X关闭功能

    用到 dialog弹出框时,不想要右上角的X 关闭功能,只是做个提示信息显示,下面是具体的去掉方法,大家可以参考下 再用到 dialog弹出框时,不想要右上角的X 关闭功能,只是做个提示信息显示. 在 ...