.NET网站在Web.config的<configuration>下<system.web>下<sessionState>配置session.

sessionState节点的mode属性可以设置为:Custom、InProc、Off、SQLServer、StateServer,默认是InProc,和网站保存在同一进程,如: IIS的运用程序连接池进程w3wp.exe。

一、Session是如何工作的?Session和Cookie的关系

  默认情况下,Session是依赖cookie的,当服务器保存了一个Session后...  

二、InProc的弊端

  InProc模式的时候,如果网站中的web.config文件,dll文件,网站的Session会丢失。这种模式,Session有时候好像也不是很稳定,我们可以尝试StateServer模式。

三、如何使用StateServer保存Session?

  1. 启动ASP.NET 状态服务

    Windows系统,安装了.NET Framework之后,会自动安装一个服务:ASP.NET State Service(ASP.NET 状态服务),默认服务不启动,使用ASP.NET状态服务,首先要启动这个服务。

    服务启动后,系统会开启一个进程aspnet_state.exe,会话会单独保存在这个进程里面。

  2. 用aspnet_state进程保存Session,需要保证存放在Session中的对象,要是可以被序列化的,用[Serializable]特性标记。

    需要注意的是:

    1) 类中的属性是一个类的对象的话,该对象的类也应该能被序列化,如下面实例代码中的ProviderAddressInfo也需要能被序列化,ProviderAddressInfo类中的属性,也是同样,无限往下延伸。

    2) ClassB: ClassA,如果Session中保存了ClassB的对象,那么ClassA也需要能被序列化。

    3) 类中的常量不能被序列化,需要改写为属性。 (还是说成员变量都不行,不光是常量,必须是属性才能被序列化)

    dynamic变量?

using System;
using System.Collections.Generic; namespace Model.Provider
{
/// <summary>
/// Provider Info
/// </summary>
[Serializable]
public class ProviderInfo
{
public decimal ProviderId { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string MiddleName { get; set; }
public ICollection<ProviderAddressInfo> ProviderAddresses { get; set; }
public ICollection<ProviderContractInfo> ProviderContracts { get; set; }
public ICollection<SpecialtyInfo> ProviderSpecialties { get; set; } public static string PCP
{
get
{
return "P";
}
} }
}

PS:工作的时候,Session保存的对象中有常量,编译没有问题,Web端调用Web API,API的Controller中正常返回了数据集,Web端的调用的时候,Web Request请求远程响应结果却是500内部服务器错误,就是因为序列化的问题,这个错误很难发现。

Asp.NET网站Session浅谈的更多相关文章

  1. 【ASP.NET 系列】浅谈缓存技术在ASP.NET中的运用

    本篇文章虽不谈架构,但是Cache又是架构中不可或缺的部分,因此,在讲解Cache的同时,将会提及到部分架构知识,关于架构部分,读者可以不用理解,或者直接跳过涉及架构部分的内容 你只需关心Cache即 ...

  2. ASP.NET中Session的个人浅谈

    看到博客园的一个哥们写的面试经历,想到了面试中常问到的Session,一时手痒就谈下自己对Session的理解,这东西最开始在用户登录登出的时候用到过,后来一直没怎么用过,里面还是有很多知识点值得注意 ...

  3. 【ASP.NET MVC系列】浅谈ASP.NET 页面之间传值的几种方式

    ASP.NET MVC系列文章 [01]浅谈Google Chrome浏览器(理论篇) [02]浅谈Google Chrome浏览器(操作篇)(上) [03]浅谈Google Chrome浏览器(操作 ...

  4. 【ASP.NET MVC系列】浅谈Google Chrome浏览器(操作篇)(下)

    ASP.NET MVC系列文章 [01]浅谈Google Chrome浏览器(理论篇) [02]浅谈Google Chrome浏览器(操作篇)(上) [03]浅谈Google Chrome浏览器(操作 ...

  5. 【ASP.NET MVC系列】浅谈ASP.NET 程序发布过程

    ASP.NET MVC系列文章 [01]浅谈Google Chrome浏览器(理论篇) [02]浅谈Google Chrome浏览器(操作篇)(上) [03]浅谈Google Chrome浏览器(操作 ...

  6. 浅谈JS中的!=、== 、!==、===的用法和区别 JS中Null与Undefined的区别 读取XML文件 获取路径的方式 C#中Cookie,Session,Application的用法与区别? c#反射 抽象工厂

    浅谈JS中的!=.== .!==.===的用法和区别   var num = 1;     var str = '1';     var test = 1;     test == num  //tr ...

  7. 【架构】浅谈web网站架构演变过程

    浅谈web网站架构演变过程   前言 我们以javaweb为例,来搭建一个简单的电商系统,看看这个系统可以如何一步步演变.   该系统具备的功能:   用户模块:用户注册和管理 商品模块:商品展示和管 ...

  8. 【转】.NET(C#):浅谈程序集清单资源和RESX资源 关于单元测试的思考--Asp.Net Core单元测试最佳实践 封装自己的dapper lambda扩展-设计篇 编写自己的dapper lambda扩展-使用篇 正确理解CAP定理 Quartz.NET的使用(附源码) 整理自己的.net工具库 GC的前世与今生 Visual Studio Package 插件开发之自动生

    [转].NET(C#):浅谈程序集清单资源和RESX资源   目录 程序集清单资源 RESX资源文件 使用ResourceReader和ResourceSet解析二进制资源文件 使用ResourceM ...

  9. 浅谈程序员创业(要有一个自己的网站,最好的方式还是自己定位一个产品,用心把这个产品做好。或者满足不同需求的用户,要有特色)good

    浅谈程序员创业 ——作者:邓学彬.Jiesoft 1.什么是创业? 关于“创业”二字有必要重新学习一下,找了两个相对权威定义: 创业就是创业者对自己拥有的资源或通过努力能够拥有的资源进行优化整合,从而 ...

随机推荐

  1. PAT1099

    /*innner order traverse for BST will be ordered *1.sort the value in buffer *2.inner traverse the BS ...

  2. docker学习(二)

    1 镜像 docker使用联合加载技术,一次同时加载多个文件系统,在外面只能看到一个文件系统 docker使用写时复制,每个只读镜像层都是只读的,也永远不会发生变化,建立一个新容器,会构建一个镜像栈, ...

  3. 监控系统 - check_mk_agent

    系统级监控 cpu (system, user) memory (cache, buffer, use)(MB) load (cpu core) diskspace (used, inode)(GB) ...

  4. Could not resolve this reference. Could not locate the assembly

    Rebuild Project 的时候提示找不到NewtonJson 组件,重新添加了Dll(Newtonsoft.Json.dll),依然抛错. 解决办法,将Dll(Newtonsoft.Json. ...

  5. oracle查询使用频率和磁盘消耗需要缓存大小

    SELECT * FROM (SELECT Sql_Text, Sql_Id, Cpu_Time FROM V$sql ORDER BY Cpu_Time DESC) ORDER BY Rownum ...

  6. 搭建高性能计算环境(七)、应用软件的安装之MS

    1,上传软件包MaterialsStudio70.tgz.msi_7.lic到服务器上. 2,安装ms一般会创建一个普通用户msi,软件安装在msi账号下. 创建用户msi: useradd msi ...

  7. 如何解决谷歌浏览器下jquery无法获取图片的尺寸

    代码如下: $(document).ready(function(){ var img_h=$img.height(); var img_w=$img.width(); }) 以上代码在IE和火狐中没 ...

  8. TextField 限定只输入数字的方法

    func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementStri ...

  9. ASP.NET的学习之asp.net整体运行机制

    1.浏览器向服务器发送请求报文,服务器端的软件比如是IIS,接受请求 2.IIS通过aspnet_isapi.dll 这个程序集来请求FrameWork中的ASP.Net框架,这是对于集成模式 3.进 ...

  10. apache日志文件详解和实用分析命令

    apache日志文件每条数据的请意义,以及一些实用日志分析命令. 一.日志分析  如果apache的安装时采用默认的配置,那么在/logs目录下就会生成两个文件,分别是access_log和error ...