一.问题描述:

最近需要做一个对特定请求(.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. webform工程中aspx页面为何不能调用appcode文件夹下的类(ASP.NET特殊文件夹的用法)

    App_code 只有website类型的工程才有效. App_Code 下创建的.cs文件仅仅是“内容”不是代码.你设置那个文件为“编译”就行了. 其他特殊文件夹 1. Bin文件夹 Bin文件夹包 ...

  2. [转载]SAP BASIS学习手册

    原文地址:SAP BASIS学习手册作者:sapren     1:)要用scc4定义一个新的client,同时定义好类型(T,P,D等) 2:)用user/pasword: (sap*/pass) ...

  3. Asp.Net 导出Excel数据文件

    表格例子如下: <table id="tableExcel" width="100%" border="1" cellspacing= ...

  4. placeholder修改颜色

    :-moz-placeholder { /* Mozilla Firefox 4 to 18 */ color: #f00; } ::-moz-placeholder { /* Mozilla Fir ...

  5. jQuery实现图片延迟加载

    html: <img src ="占位图路径" data-original="真实图片路径" /> js: $("img").l ...

  6. 类似UC天气下拉和微信下拉眼睛头部弹入淡出UI交互效果(开源项目)。

    Android-PullLayout是github上的一个第三方开源项目,该项目主页是:https://github.com/BlueMor/Android-PullLayout  原作者项目意图实现 ...

  7. 1968: [Ahoi2005]COMMON 约数研究

    #include<cstdio> #include<iostream> #define M 1000008 using namespace std; long long tot ...

  8. ios应用数据存储的常用方式 ios7.1应用沙盒

    归档:用某种格式保存某个对象,又称持久化. 1XML 属性列表plist归档(持久化) 2Preference(偏好设置) 3NSKeyedArchiver归档 4SQLite3 5Core Data ...

  9. C/C++类型转换总结

    ---恢复内容开始--- 最近做笔试题经常会碰到有关类型转换的题型,所以结合例子做下总结,也是希望自己能更时刻的理解类型转换. C++的类型转换包括内置类型和类类型对象的转换. (1) 1.1隐式类型 ...

  10. 虚拟机安装Centos版本的linux

    选择自定义安装,然后一路确定下去,对了,Centos的版本一定要高,比如centos 6,太低安装会出问题