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.什么是创业? 关于“创业”二字有必要重新学习一下,找了两个相对权威定义: 创业就是创业者对自己拥有的资源或通过努力能够拥有的资源进行优化整合,从而 ...
随机推荐
- java servlet上传文件并把文件内容显示在网页中
servlet3.0(JDK1.6)自带的API即可实现本地文件的上传,Servlet3.0新增了Part接口,HttpServletRequest的getPart()方法取得Part实现对象.下面我 ...
- javascript创建对象的相关问题
javascript创建对象的方法有很多种,一般来说,推荐使用对象字面量来创建对象. 对象构造函数捕捉 使用new Object来创建对象,可能会带来一些问题: var o = new Object( ...
- Leetcode026. Remove Duplicates from Sorted Array
water class Solution { public: int removeDuplicates(vector<int>& nums) { for(vector<int ...
- Windows phone 8 学习笔记(4) 应用的启动(转)
Windows phone 8 的应用除了可以直接从开始菜单以及应用列表中打开外,还可以通过其他的方式打开.照片中心.音乐+视频中心提供扩展支持应用从此启动.另外,我们还可以通过文件关联.URI关联的 ...
- C#常用的正则表达式
using System.Text.RegularExpressions; 英文Regex.IsMatch("字符串", @"^[a-zA-Z0-9_\u4e00-\u9 ...
- FTP操作
using System; using System.Collections.Generic; using System.Text; using System.IO; using System.Net ...
- php实现文件上传的源码
php实现文件上传的源码,更多php技术开发就去php教程网,http://php.662p.com <?php ##author :Androidyue ##sina @androidyue ...
- wpf常见枚举收集
Icons made by from www.flaticon.com
- C#winform设置DateTimePicker的时间格式
在对DateTimePicker进行时间格式设置时候,要先对属性Format设置为"Custom"自定义格式,然后再CustomFormat里面进行格式设置 比如"yyy ...
- ADO .NET 链接 增删改查
ADO.NET: 数据访问技术 就是将C#和MSSQL连接起来的一个纽带 可以通过ADO.NET将内存中的临时数据写入到数据库中也可以将数据库中的数据提取到内存中供程序调用 所有数据访问技术的基础 连 ...