一.问题描述:

最近需要做一个对特定请求(.report)进行响应的接口,当然是使用实现IHttpHandler来进行处理,实现IHttpHandler接口就必须要实现它的两个方法,ProcessRequest(HttpContext context) 和IsRunable() ,看到在ProcessRequest(HttpContext context) 中有个HttpContext的输入参数,以为通过这个就可以对所有的服务器对象进行使用。不过问题出现了,在这个自定义HTTP响应处理类中,对于Request和Response都可以通过使用HttpContext来引用使用,不过Session 就是不行,总是出现对象未进行引用的错误!

二.解决办法:

通过上网查资料,却无意中发现在自定义HTTPHANDLER中使用SESSION 的方法!

1、先引用System.Web.SessionState这个命名空间,

2、如果是要在HttpHandler中读取Session的内容,就要在实现IHttpHandler的类中同时实现IReadOnlySessionState这个接口。

3、如果是要在HttpHandler中读写Session的内容,就要在实现IHttpHandler的类中同时实现IRequiresSessionState   这样就可以在自定义的HttpHandler 中正常的使用Session了。

三.代码演示:

1.前台页面cs文件

public partial class TestPage: System.Web.UI.Page

{

protected void Page_Load(object sender, EventArgs e)

{

}

protected void BtnUpLoad_Click(object sender, EventArgs e)

{

XmlDocument doc = new XmlDocument();

doc.Load(TemplateUpload.FileContent);

Session["upLoadXmlDoc"] = doc;

string url = "test.report";

Response.Redirect(url);

}

}

2.实现IHttpHandler的HttpHandler类,用来处理test.report

public class myHttpHandler:IHttpHandler

{

public void ProcessRequest(HttpContext context)

{

String className = businessConfig.Business[context.Request.Path];

//本行将报错,提示:Object reference not set to an instance of an object.

//添加监视,得知context.Session为null

XmlDocument doc =  context.Session["upLoadXmlDoc"]

}

// Override the IsReusable property.

public bool IsReusable

{

get { return true; }

}

}

3.解决办法:

让myHttpHandler再实现IRequiresSessionState就ok了

public class myHttpHandler:IHttpHandler,IRequiresSessionState

{

public void ProcessRequest(HttpContext context)

{

String className = businessConfig.Business[context.Request.Path];

XmlDocument doc =  context.Session["upLoadXmlDoc"];

}

// Override the IsReusable property.

public bool IsReusable

{

get { return true; }

}

}

HttpHandler中无法使用Session(context.Session 为Null)的更多相关文章

  1. abp项目中无法使用HttpContext.Current.Session[""]的问题

    web项目Global.asax.cs中加入如下代码 public override void Init() { this.PostAuthenticateRequest += (sender, e) ...

  2. ashx页面中context.Session["xxx"]获取不到值的解决办法

    在 aspx和aspx.cs中,都是以Session["xxx"]="aaa"和aaa=Session["xxx"].ToString()进 ...

  3. eclipse 中离线安装activiti插件,报错“An error occurred while collecting items to be installed session context was:(...”

    eclipse 中离线安装activiti插件,报错“An error occurred while collecting items to be installed session context ...

  4. 在ASP.Net MVC 中如何实现跨越Session的分布式TempData

    Hi,guys!Long time no see! 1.问题的引出 我相信大家在项目中都使用过TempData,TempData是一个字典集合,一般用于两个请求之间临时缓存数据或者页面之间传递消息.也 ...

  5. 分布式中使用Redis实现Session共享(二)

    上一篇介绍了一些redis的安装及使用步骤,本篇开始将介绍redis的实际应用场景,先从最常见的session开始,刚好也重新学习一遍session的实现原理.在阅读之前假设你已经会使用nginx+i ...

  6. 程序中的Cookie 和Session

    这几天回家休息后,想想放假之前的几天,主要看的一些工作上的东西,发现对Session和Cookie这两个东西,我还是很陌生.恩,趁着有网,看了点相关的资料,打算整理下.一翻博客,发现已经有前辈已经对这 ...

  7. context.Session[“xxx”]详解

    1.在aspx和aspx.cs中,都是以Session[“xxx”]=”aaa”和aaa=Session[“xxx”].ToString()进行读写.而在ashx中,Session都要使用contex ...

  8. [转]分布式中使用Redis实现Session共享(二)

    本文转自:http://www.cnblogs.com/yanweidie/p/4678095.html 上一篇介绍了一些redis的安装及使用步骤,本篇开始将介绍redis的实际应用场景,先从最常见 ...

  9. (转)分布式中使用Redis实现Session共享(二)

    上一篇介绍了一些redis的安装及使用步骤,本篇开始将介绍redis的实际应用场景,先从最常见的session开始,刚好也重新学习一遍session的实现原理.在阅读之前假设你已经会使用nginx+i ...

随机推荐

  1. 【转】数据库范式(1NF 2NF 3NF BCNF)详解一

    以下内容转自:http://jacki6.iteye.com/blog/774866 --------------------------------------------分割线---------- ...

  2. 碰到sshd连接不上linux时的解决办法

    1,首先更改ssh配置,可以是ssh端口连接不上服务器 cd /etc/ssh/sshd_config vi !$ Port 52113 //ssh默认的连接端口, 改为别人不知道的端口 Permit ...

  3. js 数组 转

    1.数组的创建 var arrayObj = new Array(); //创建一个数组 var arrayObj = new Array([size]); //创建一个数组并指定长度,注意不是上限, ...

  4. changepassword.c 0.9:一个通过WEB界面更改LINUX用户密码的程序

    偶然看到一个用C语言写的CGI程序,可以以WEB界面(无需单独再写HTML)的方式修改用户自己的密码.该程序具有同时修改samba及squid密码的能力. 步骤: 1.下载并解压,并读一下README ...

  5. [Elasticsearch] 多字段搜索 (三) - multi_match查询和多数字段 <译>

    multi_match查询 multi_match查询提供了一个简便的方法用来对多个字段执行相同的查询. NOTE 存在几种类型的multi_match查询,其中的3种正好和在“了解你的数据”一节中提 ...

  6. 怎么学好python?

    文章摘自:http://www.jb51.net/article/16100.htm 1)学好python的第一步,就是马上到www.python.org网站上下载一个python版本.我建议初学者, ...

  7. clearfix

    过渡放在原:transiton:2s; 块无素:block,inline inline-block1,占一行,有宽,有高内元素:2,无宽高,内容撑开宽高.不支持上下margin.代码换行补解析.3, ...

  8. 哪些字符需要urlencode编码?具体怎么处理?

    哪些字符需要urlencode编码?具体怎么处理? JS用escape()/encodeURI()/encodeURIComponent()方法编码,用unescape()/decodeURI()/e ...

  9. Android 读写SD卡的文件

    今天介绍一下Android 读写SD卡的文件,要读写SD卡上的文件,首先需要判断是否存在SD卡,方法: Environment.getExternalStorageState().equals(Env ...

  10. android 获取activity 的name

    String contextString = this.toString();String name = contextString.substring(contextString.lastIndex ...