Asp.NET网站Session浅谈
.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浅谈的更多相关文章
- 【ASP.NET 系列】浅谈缓存技术在ASP.NET中的运用
本篇文章虽不谈架构,但是Cache又是架构中不可或缺的部分,因此,在讲解Cache的同时,将会提及到部分架构知识,关于架构部分,读者可以不用理解,或者直接跳过涉及架构部分的内容 你只需关心Cache即 ...
- ASP.NET中Session的个人浅谈
看到博客园的一个哥们写的面试经历,想到了面试中常问到的Session,一时手痒就谈下自己对Session的理解,这东西最开始在用户登录登出的时候用到过,后来一直没怎么用过,里面还是有很多知识点值得注意 ...
- 【ASP.NET MVC系列】浅谈ASP.NET 页面之间传值的几种方式
ASP.NET MVC系列文章 [01]浅谈Google Chrome浏览器(理论篇) [02]浅谈Google Chrome浏览器(操作篇)(上) [03]浅谈Google Chrome浏览器(操作 ...
- 【ASP.NET MVC系列】浅谈Google Chrome浏览器(操作篇)(下)
ASP.NET MVC系列文章 [01]浅谈Google Chrome浏览器(理论篇) [02]浅谈Google Chrome浏览器(操作篇)(上) [03]浅谈Google Chrome浏览器(操作 ...
- 【ASP.NET MVC系列】浅谈ASP.NET 程序发布过程
ASP.NET MVC系列文章 [01]浅谈Google Chrome浏览器(理论篇) [02]浅谈Google Chrome浏览器(操作篇)(上) [03]浅谈Google Chrome浏览器(操作 ...
- 浅谈JS中的!=、== 、!==、===的用法和区别 JS中Null与Undefined的区别 读取XML文件 获取路径的方式 C#中Cookie,Session,Application的用法与区别? c#反射 抽象工厂
浅谈JS中的!=.== .!==.===的用法和区别 var num = 1; var str = '1'; var test = 1; test == num //tr ...
- 【架构】浅谈web网站架构演变过程
浅谈web网站架构演变过程 前言 我们以javaweb为例,来搭建一个简单的电商系统,看看这个系统可以如何一步步演变. 该系统具备的功能: 用户模块:用户注册和管理 商品模块:商品展示和管 ...
- 【转】.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 ...
- 浅谈程序员创业(要有一个自己的网站,最好的方式还是自己定位一个产品,用心把这个产品做好。或者满足不同需求的用户,要有特色)good
浅谈程序员创业 ——作者:邓学彬.Jiesoft 1.什么是创业? 关于“创业”二字有必要重新学习一下,找了两个相对权威定义: 创业就是创业者对自己拥有的资源或通过努力能够拥有的资源进行优化整合,从而 ...
随机推荐
- JavaScript高级 面向对象的程序设计 (二)《JavaScript高级程序设计(第三版)》
二.继承 OO是面向对象语言最为有魅力的概念.一般的OO语言都实现了两种继承,接口继承和实现继承.接口继承只继承方法签名,而实际继承继承了实际的方法. 而在JS中,函数没有签名,所以无法实现接口继承. ...
- Python-2.7.11+Django-1.9.4安装配置
1.去python官网下载2.7的最新版本 https://www.python.org/downloads 1.1 解压Python-2.7.11.tgz tar xvf Python-2.7.11 ...
- 详解Oracle临时表的几种用法及意义
Oracle临时表可以说是提高数据库处理性能的好方法,在没有必要存储时,只存储在Oracle临时表空间中.希望本文能对大家有所帮助. 1 .前言 Oracle Logo 目前所有使用 Oracle 作 ...
- 判断字符串是否包含字母‘k’或者‘K’
判断字符串是否包含字母‘k’或者‘K’ public bool IsIncludeK(string temp) { temp = temp.ToLower(); if (temp.Contains(' ...
- Redis监控方案
Redis 监控最直接的方法当然就是使用系统提供的 info 命令来做了,你只需要执行下面一条命令,就能获得 Redis 系统的状态报告. redis-cli info 内存使用 如果 Redis 使 ...
- Incorrect integer value: '' for column 'id' at row 1
最近在写个查询 插入语句的时候 我是这么写的 insert into test values('',$row[contentid],'".$tn."'); 结果搞死没插入进去 然 ...
- IntelliJ IDEA 13破解(JRebel 5.6.3a破解)
首先安装IntelliJ 13,记得要下载Ultimate Edition版本,不然就不需要破解了.. 安装到本地,然后进行一些配置(这一步可以不要,但是考虑到以后换系统可以省事,推荐做) 打开{in ...
- PopupWindow的简单使用
测试代码: package com.zzw.testpopuwindows; import android.app.Activity; import android.graphics.Color; i ...
- 复习URLHttpConnection方式GET,POST方式链接网络解析uri
xml: <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:t ...
- 代码重启SQL命令
1.net stop mssqlserver --停止mssqlserver 2.net start mssqlserver --开始mssqlserver