实战 HTTP 处理程序(HTTP Handler) (4)--与Web程序共享Session
2007-09-05 09:05
721 查看
让 HTTP 处理程序与当前的Web程序共享Session,实在是简单到了不能再简单的地步——只要让类 MyHandler 实现 System.Web.SessionState.IRequiresSessionState 接口就行了。就像这样
Default.aspx.cs
1 using System;
2 using System.Data;
3 using System.Configuration;
4 using System.Web;
5 using System.Web.Security;
6 using System.Web.UI;
7 using System.Web.UI.WebControls;
8 using System.Web.UI.WebControls.WebParts;
9 using System.Web.UI.HtmlControls;
10
11 using System.Collections.Generic;
12
13 public partial class _Default : System.Web.UI.Page
14 {
15 protected void Page_Load(object sender, EventArgs e)
16 {
17 mylib.system.web.MyHandler.msg = "impossible is nothing";
18 }
19 }
上面的代码用了几个小技巧:
1. 避免 Session 重名。我们的应用程序可能会有许多地方会用到 Session,如果出现重名,就会产生很难捉到的 Bug,所以我们必须使用一种可以有效避免重名的命名规范。在本例中,我们使用的命名规范是“命名空间名+类名+属性名”,见 MyHandler.cs 的第22行。
2. 将对 Session 的访问封装到属性中。为了避免 Session 重名,我们使用了很长的 Session 名称。这长长的名字即不易读,也难以书写。放到代码中,会使代码冗长而丑陋。更要命的是,如果万一需要修改某个 Session 名字,就需要在整个项目中进行查找和替换,这是一项既乏味又危险的工作。解决方法是,将对 Session 的读写封装到一个静态的属性中,见 MyHandler.cs 的第20~24行、MyHandler.cs 的第28行、Default.aspx.cs 的第17行。
3. 使用 System.Web.HttpContext.Current.Session 访问当前Web 应用程序的Session。通常我们是使用 Page.Session(在网页的后台代码中)或 context.Session(在 MyHandler 类的 ProcessRequest 函数中)来访问当前Web应用程序的 Session。但是在类库中,我们无法获取 Page 变量或 context 变量,这时我们就可以使用System.Web.HttpContext.Current.Session 访问当前Web 应用程序的Session,见 MyHandler.cs 的第20~24行。
本篇到此结束,下一篇将利用本篇的代码,稍加改动,实现不需临时文件,直接生成PDF文件并下载到客户端。
下载本篇全部源代码
本系列共6篇文章
实战 HTTP 处理程序(HTTP Handler) (6)——条码随意打
实战 HTTP 处理程序(HTTP Handler) (5)——不用临时文件,直接打开动态生成的文件
实战 HTTP 处理程序(HTTP Handler) (4)——与Web程序共享Session <- you are here.
实战 HTTP 处理程序(HTTP Handler) (3)——动态生成图片
实战 HTTP 处理程序(HTTP Handler) (2)——向HTTP 处理程序传递参数
实战 HTTP 处理程序(HTTP Handler) (1)——创建一个最简单的 HTTP Handler
Default.aspx.cs
1 using System;
2 using System.Data;
3 using System.Configuration;
4 using System.Web;
5 using System.Web.Security;
6 using System.Web.UI;
7 using System.Web.UI.WebControls;
8 using System.Web.UI.WebControls.WebParts;
9 using System.Web.UI.HtmlControls;
10
11 using System.Collections.Generic;
12
13 public partial class _Default : System.Web.UI.Page
14 {
15 protected void Page_Load(object sender, EventArgs e)
16 {
17 mylib.system.web.MyHandler.msg = "impossible is nothing";
18 }
19 }
上面的代码用了几个小技巧:
1. 避免 Session 重名。我们的应用程序可能会有许多地方会用到 Session,如果出现重名,就会产生很难捉到的 Bug,所以我们必须使用一种可以有效避免重名的命名规范。在本例中,我们使用的命名规范是“命名空间名+类名+属性名”,见 MyHandler.cs 的第22行。
2. 将对 Session 的访问封装到属性中。为了避免 Session 重名,我们使用了很长的 Session 名称。这长长的名字即不易读,也难以书写。放到代码中,会使代码冗长而丑陋。更要命的是,如果万一需要修改某个 Session 名字,就需要在整个项目中进行查找和替换,这是一项既乏味又危险的工作。解决方法是,将对 Session 的读写封装到一个静态的属性中,见 MyHandler.cs 的第20~24行、MyHandler.cs 的第28行、Default.aspx.cs 的第17行。
3. 使用 System.Web.HttpContext.Current.Session 访问当前Web 应用程序的Session。通常我们是使用 Page.Session(在网页的后台代码中)或 context.Session(在 MyHandler 类的 ProcessRequest 函数中)来访问当前Web应用程序的 Session。但是在类库中,我们无法获取 Page 变量或 context 变量,这时我们就可以使用System.Web.HttpContext.Current.Session 访问当前Web 应用程序的Session,见 MyHandler.cs 的第20~24行。
本篇到此结束,下一篇将利用本篇的代码,稍加改动,实现不需临时文件,直接生成PDF文件并下载到客户端。
下载本篇全部源代码
本系列共6篇文章
实战 HTTP 处理程序(HTTP Handler) (6)——条码随意打
实战 HTTP 处理程序(HTTP Handler) (5)——不用临时文件,直接打开动态生成的文件
实战 HTTP 处理程序(HTTP Handler) (4)——与Web程序共享Session <- you are here.
实战 HTTP 处理程序(HTTP Handler) (3)——动态生成图片
实战 HTTP 处理程序(HTTP Handler) (2)——向HTTP 处理程序传递参数
实战 HTTP 处理程序(HTTP Handler) (1)——创建一个最简单的 HTTP Handler
相关文章推荐
- 实战 HTTP 处理程序(HTTP Handler) (4)--与Web程序共享Session
- 为自定义 HTTP 处理程序(HttpHandler)开启会话状态(Session)
- 实战 HTTP 处理程序(HTTP Handler) (2) -- 向HTTP 处理程序传递参数
- IIS - HTTP 错误 500.21 - Internal Server Error 处理程序“WebServiceHandlerFactory-Integrated”在其模块列表中有一个错误模块“ManagedPipelineHandler”
- 实战 HTTP 处理程序(HTTP Handler) (3) -- 动态生成图片
- 实战 HTTP 处理程序(HTTP Handler) (1) -- 创建一个最简单的 HTTP Handler
- 实战 HTTP 处理程序(HTTP Handler) (5)---不用临时文件,直接打开动态生成的文件
- 实战 HTTP 处理程序(HTTP Handler) (5)---不用临时文件,直接打开动态生成的文件
- 实战 HTTP 处理程序(HTTP Handler) (2) -- 向HTTP 处理程序传递参数
- 实战 HTTP 处理程序(HTTP Handler) (5)---不用临时文件,直接打开动态生成的文件
- 实战 HTTP 处理程序(HTTP Handler) (3) -- 动态生成图片
- 实战 HTTP 处理程序(HTTP Handler) (5)---不用临时文件,直接打开动态生成的文件
- HTTP 错误 500.21 - Internal Server Error 处理程序“WebServiceHandlerFactory-Integrated”在其模块列表中有一个错误模块“ManagedPipelineHandler”
- 实战 HTTP 处理程序(HTTP Handler) 条码随意打
- 实战 HTTP 处理程序(HTTP Handler) (6)---条码随意打
- 实战 HTTP 处理程序(HTTP Handler) (6)---条码随意打
- .net System.Web.HttpContext.Current.Session 获取值出错(一般处理程序中出错)
- HTTP 错误 500.21 - Internal Server Error 处理程序“WebServiceHandlerFactory-Integrated”在其模块列表中有一个错误模块“ManagedPipelineHandler”
- 实战 HTTP 处理程序(HTTP Handler) -- 动态生成图片
- 实战 HTTP 处理程序(HTTP Handler) (1) -- 创建一个最简单的 HTTP Handler