asp.net – 跨线程使用HTTPContext
|
用户点击页面spawn.aspx,然后生成六打线程,渲染页面全部使用 ((System.Web.IHttpHandler)instance).ProcessRequest(reference to spawn's HTTPContext); 不要担心ASP.Net似乎是发送用户7个响应1请求,该部分被处理,只有一个响应被发送. 问题在于,在高流量环境(我们的生产环境)中有许多线程(四分之一)),我们会发现错误:
我们不能在其他地方复制.我的同事认为这是因为我正在重用原始的HTTPContext并将其传递给其他线程,而且它不是线程安全的. 按照这个逻辑,我已经尝试使一个新的HTTPContext进入线程.但它的一部分似乎不会“结合”.具体来说,我需要将Session对象转换成新的HTTPContext.我想我想要得到其他部分,像缓存.对于记录HTTPContext.Current.Session.IsSynchronized为false. 我的问题是: >你认为这个错误是从跨线程使用HTTPContext吗? 编辑:更多细节 所以回到这个声明:“不要担心ASP.Net似乎是发送用户7个响应1请求,只有一个响应被发送.”雷蒙德陈的巨大粉丝,我同意你的看法:“现在你有两个问题”是没有任何更多信息的合理的声明. 实际发生的是我正在构建一个要发回的Excel文档.在spawn.aspx页面中,它设置了一些状态信息,包括将其渲染为excel的事实,以及要执行渲染的对象.每个生成的页面都会获取该信息,并且将阻止它们轮到渲染到该对象.如果字面上看起来像这样: protected override void Render(System.Web.UI.HtmlTextWriter writer)
{
if (this.RenderToExcel)
{
Deadlocker.SpinUntilCurrent(DeadLockToken);
RenderReport(this,this.XLSWriter);
Deadlocker.Remove(DeadLockToken);
}
else
base.Render(writer);
}
但是到目前为止所有的处理 – 数据库访问,控制权力,所有这些都是并行完成的.而且还有很多 – 足够让它变得模棱两可,而仍然让它阻挡在渲染上会将整个时间缩短一半以上. 而最好的部分是 – 没有什么必须重写为Excel渲染.所有控件都知道如何使自己成为excel,而且您可以独立访问每个生成的页面(实际上是“正常情况”) – excel报告只是所有生成页面的聚合.) 所以我认为最终的结果将是“你不能这样做,你需要重新思考这种方法” – 但是我至少要尝试一下,因为事实上一切都很好,没有重复任何逻辑或任何代码或必须抽象任何东西才是完美的.它只是多线程的问题,如果我连续渲染页面一切都很好,只是缓慢. 解决方法虽然HttpContext旨在处理不是特定于线程的上下文(因为http上下文可以在一个线程上启动并在另一个线程上完成),但它不是隐式线程安全的.本质上问题在于你正在做一些不想要的事情,这些请求一般是多个,每个都有自己分配的HttpApplication来满足请求,每个都有自己的HttpContext. 我真的会尝试让asp.net基础架构委托请求本身. (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- 使用ASP.NET Web服务的jQuery AutoComplete(jQuery UI 1.8r
- asp.net-mvc – Html.DisplayFor不发布值到控制器在ASP.NET
- 从代码隐藏调用ASP.NET Web API
- asp.net – 如何获取网站根URL?
- asp.net-mvc-5 – Windows身份验证在ASP.NET MVC 5网络应用
- 维护面板滚动位置部分回传ASP.NET
- asp.net – Web Api 2:“样例不可用”
- asp.net – .NET Ionic.Zip模块查杀驱动器空间
- asp.net-mvc – MVC 4 SimpleMembership – 登录后为什么We
- ASP.NET jQuery错误:未知的Web方法
- asp.net中的多线程
- asp.net – Azure网站上脚本/样式的长时间等待(T
- asp.net核心 – dotnet cli – “检测包降级”
- asp.net neatUpload 支持大文件上传组件
- asp.net-mvc-4 – Visual Studio 2013 C#Web项目
- asp.net – 我可以通过编程方式禁用更新面板吗?
- asp.net-mvc-3 – SQL Server 2008连接字符串,用
- asp.net-mvc – CloudFlare SSL与ASP.NET MVC Re
- asp.net-mvc – 已经处理了DbContext和autofac
- asp.net-core – 如何在ASP.NET 5 MVC中访问缓存
