积极答复者
ASHX中保存的Session不能传到ASPX

问题
-
IIS7中,ASHX中保存的Session不能传到ASPX,但是用VS2010自带的调试服务器就可以的,这是为什么?IIS7的什么地方设置有问题
- 已移动 chenrensong 2012年5月9日 0:51 有关iis的问题! (发件人:ASP.NET 与 AJAX)
答案
-
在经典托管管道模式下,IIS行为和以前的IIS6版本是一致的。
我试了一下你的代码,去掉了业务逻辑部份,在两种模式下都是没有问题的,虽然我用的是IIS7.5,IIS7应该也是可以的
部署到IIS7后,请求ashx文件和aspx文件的URL各是什么?确保他们使用了同一个应用程序池,而且域名也是相同的。
- 已建议为答案 LeoTangModerator 2012年5月13日 3:51
- 已标记为答案 LeoTangModerator 2012年5月14日 3:20
全部回复
-
可以给看看具体代码吗?要继承IHttpHandler, IRequiresSessionState 这两个接口!
public class Service : IHttpHandler, IRequiresSessionState { HttpRequest Request; HttpResponse Response; HttpSessionState Session; HttpServerUtility Server; HttpCookie Cookie; public void ProcessRequest(HttpContext context) { context.Response.Buffer = true; context.Response.ExpiresAbsolute = DateTime.Now.AddDays(-1); context.Response.AddHeader("pragma", "no-cache"); context.Response.AddHeader("cache-control", ""); context.Response.CacheControl = "no-cache"; context.Response.ContentType = "text/plain"; Request = context.Request; Response = context.Response; Session = context.Session; //Server = context.Server; //string method = Request["Method"].ToString(); //MethodInfo methodInfo = this.GetType().GetMethod(method); //methodInfo.Invoke(this, null); GetTree(); }
-
Web.config的
<sessionState mode="Off" ></sessionState>
mode不能为Off
- The blog of typewriter職人
- Convert C# to VB.NET
- /*If my concept is wrong ,please correct me.Thanks.*/
-
还是行不通,我把代码发上来,大家指点指点:
ashx:
[Serializable] [WebService(Namespace = "http://tempuri.org/")] [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] public class WebOffice_Handler : IHttpHandler, IRequiresSessionState { private string sid = ""; private int tid = 0; public void ProcessRequest(HttpContext context) { MpLeagalStaffAuthorization(context); //调试标记 //System.Diagnostics.Debug.Assert(false); context.Response.ContentType = "text/plain"; context.Response.Buffer = true; context.Response.ExpiresAbsolute = DateTime.Now.AddDays(-1); context.Response.AddHeader("pragma", "no-cache"); context.Response.AddHeader("cache-control", ""); context.Response.CacheControl = "no-cache"; string m = context.Request.Params["m"] != null ? context.Request.Params["m"].ToString().Trim() : ""; string t = context.Request.Params["tid"] != null ? context.Request.Params["tid"].ToString().Trim() : ""; string d = context.Request.Params["sid"] != null ? context.Request.Params["sid"].ToString().Trim() : "" ; if (m.Length==0 || d.Length==0) return; sid = HttpUrlEncode.Decrypt(d); tid = Convert.ToInt32(t); string p = ""; if (m.ToLower().Equals("gen")) { //需要根据模版生成路径放到Session中,转发给Result.aspx p=GenDocPath(sid, tid, 0); } else if (m.ToLower().Equals("edit")) { //需要在线编辑现有的文档,把获取的路径放到Session中直接转发给WebOffice.aspx p=GetDocPath(sid,0); } if(p==null || p.Length==0) { return; } //保存获取到的生成路径到SESSION以供其有他页面提取用 //context.Session.Add("MP_DOC_PATH", p); context.Session["MP_DOC_PATH"] = p; context.Session.Timeout = 10000; //写回response context.Response.Clear(); context.Response.ContentType = "text/plain"; context.Response.Write(p); } public bool IsReusable { get { return true; } }
-
标准的ashx 可以不要有下面2个语句的。。还有你可以试试 直接去掉所有语句直接写一个 context.Session["MP"] = “123”;
然后在aspx 里面看看是否获取的到..
[WebService(Namespace = "http://tempuri.org/")] [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
如果还是不可以,估计就是你的iis问题了...
我已经把你的主题由asp.net区移动到iis专区,谢谢你的理解!
- 已编辑 chenrensong 2012年5月9日 0:53
-
在经典托管管道模式下,IIS行为和以前的IIS6版本是一致的。
我试了一下你的代码,去掉了业务逻辑部份,在两种模式下都是没有问题的,虽然我用的是IIS7.5,IIS7应该也是可以的
部署到IIS7后,请求ashx文件和aspx文件的URL各是什么?确保他们使用了同一个应用程序池,而且域名也是相同的。
- 已建议为答案 LeoTangModerator 2012年5月13日 3:51
- 已标记为答案 LeoTangModerator 2012年5月14日 3:20