从 PageAsyncTask 调用的方法中,HttpContext.Current 为 null

2024-04-08

我有一个场景,我有一个页面,单击按钮即可打开一个对话框,在单击按钮打开的对话框表单中,我可以从选定的 .txt 文件中读取数据列表并构建查询并将数据添加到某些数据库表。由于可能存在大量数据,此过程可能需要很长时间,因此用户在上传完成之前将无法使用应用程序。因此,为了使上传过程 Asynk 我使用 PageAsyncTask。下面是代码示例,但在 PageAsyncTask 中调用的方法中,HttpContext.Current 为 null,因此我无法使用会话处理。请对此提供任何指导,为什么这是空的以及在这种情况下我如何使用会话

   protected void BtnUpload_click(object sender, EventArgs e)
    {
        PageAsyncTask asyncTask1 = new PageAsyncTask(OnBegin, OnEnd, OnTimeout, SessionManager.UserData, true);

        Page.RegisterAsyncTask(asyncTask1);
        Page.ExecuteRegisteredAsyncTasks();
    }

public IAsyncResult OnBegin(object sender, EventArgs e,
            AsyncCallback cb, object extraData)
    {
        _taskprogress = "AsyncTask started at: " + DateTime.Now + ". ";
        uData = extraData as UserData;

        _dlgt = new AsyncTaskDelegate(BeginInvokeUpload);
        IAsyncResult result = _dlgt.BeginInvoke(cb, extraData);

        return result;
    }

private void BeginInvokeUpload()
    {
        string selectedFileName = string.Empty;
        string returnValuePage = string.Empty;
        User teller = new User();
        SessionManager.UserData = uData;
    }



  private void BeginInvokeUpload()
    {
        string selectedFileName = string.Empty;
        string returnValuePage = string.Empty;
        User teller = new User();
        SessionManager.UserData = uData;
    }

public class SessionManager
    {
public static UserData UserData
        {
            get 
            {
                UserData userData = null;
                if (HttpContext.Current.Session["UserData"] != null)
                {
                    userData = HttpContext.Current.Session["UserData"] as UserData;                    
                }
                return userData;
            }
            set 
            {
                 HttpContext.Current.Session["UserData"]=value;                  
            }
        }
}

答案很简单:如果HttpContext.Current is null

因此,如果您需要修改会话,您就不能简单地修改会话,唯一的选择是制作完全自定义的会话模块/解决方案。

如果您只需要读取一些值,那么您可以在创建线程时传递它们。

最后,唯一的解决方案是如果您能够操作会话变量,则不要使用线程。

为什么这样设计?

为什么 MS 会话不允许您在页面之外和线程内处理它?答案是因为需要在页面处理上锁定会话数据——有了这个锁即使你启动一个线程并能够获取会话数据,也将无法并行使用它。

另外,如果你能够在一个线程中使用自己的session,那么这个线程可能会锁定整个页面视图过程,因为我再说一遍,session是锁定整个页面视图的,而使用同一个session的每个页面都不会锁定整个页面视图。并行工作

整个页面上的会话锁定对于 MS 会话的工作方式是必要的,避免这种情况的唯一方法是制作完全自定义的会话解决方案,并使用不同的代码处理特殊情况。

这种设计的好处是,您可以避免在每次页面调用时自行进行大量锁定和同步 - 例如,如果您禁用页面上的会话,并使用该页面进行数据插入,如果使用 make multiple double单击插入,并且您没有在插入上同步处理它,最终会得到多个相同的插入。

有关会话锁定的更多信息:
完全替换 ASP.Net 的会话 https://stackoverflow.com/questions/8989648/replacing-asp-nets-session-entirely/9021543#9021543
处理共享同一会话的另一个 Web 应用程序时 Web 应用程序被阻止 https://stackoverflow.com/questions/9426673/web-app-blocked-while-processing-another-web-app-on-sharing-same-session/9427550#9427550
jQuery Ajax 对 Web 服务的调用似乎是同步的 https://stackoverflow.com/questions/9052401/jquery-ajax-calls-to-web-service-seem-to-be-synchronous/9052457#9052457
ASP.NET 服务器不异步处理页面 https://stackoverflow.com/questions/12284530/asp-net-server-does-not-process-pages-asynchronously/12285168#12285168

类似问题:
如何在没有 HttpContext.Current 的情况下通过 SessionID 获取会话数据 https://stackoverflow.com/questions/2771536/how-to-get-session-data-with-out-having-httpcontext-current-by-sessionid

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从 PageAsyncTask 调用的方法中,HttpContext.Current 为 null 的相关文章

  • 使用主题 css 文件需要页面上的标头控件。 (例如 )

    我正在开发 asp net 网络项目 当我运行该项目时 它工作正常 但在服务器中 我收到以下错误 如何解决这个问题呢 Using themed css files requires a header control on the page
  • 两个日期范围之间相交的天数

    有人知道如何最好地计算两个日期范围之间相交的天数吗 这是我写的一个小方法来计算这个 private static int inclusiveDays DateTime s1 DateTime e1 DateTime s2 DateTime
  • 使用 jQuery 将参数从一个 ASP.NET 页面传递到另一页面

    我需要使用 jQuery 将 4 个参数 3 个字符串和一个逗号分隔列表 从 ASP NET 页面传递到另一个 ASP NET 页面 目标页面应该作为单独的窗口启动 这与以下 jQuery 片段配合良好 sourcePageBtn clic
  • 为 html5 输入类型渲染 asp.TextBox =“date”

    不知道以前有没有问过 也没找到 是否可以控制由 asp TextBox 呈现的输入文本的类型 我想把它改成
  • 在会话 cookie 中存储大量数据会产生什么影响?

    谁能解释一下在会话中存储大量数据的缺点或给我指出一些阅读材料 我也很感兴趣在会话中存储数据和从数据文件读取数据之间是否有任何区别 如果您在会话中存储大量数据 则输入 输出性能会下降 因为会有大量读取 写入 默认情况下 PHP 中的会话存储在
  • 在 ASP.NET 中加密 cookie

    我想在 ASP NET 中加密 cookie 我已关注本文的方法 http www codeproject com KB web security HttpSecureCookie aspx 但它有一个缺点 那就是在内部方法上使用反射 这导
  • 良好的错误处理实践

    对于 ASP NET 站点来说 什么是良好的错误处理实践 例子 谢谢 与任何 net 项目一样 我发现最好的方法是仅捕获可能发生在给定页面上的特定错误类型 例如 您可以捕获用户给定输入的格式异常 以防 JavaScript 验证失败并且您没
  • 如何在c#中生成8字节GUID值? [复制]

    这个问题在这里已经有答案了 可能的重复 如何从 GUID 生成 8 字节唯一 ID https stackoverflow com questions 5678177 how to generate 8 bytes unique id fr
  • ASP.Net 应用程序中的音频/视频/文本聊天

    我需要在 ASP Net 中开发一个聊天系统 我已经浏览了很多关于类似主题的问题 但没有找到任何一个令人满意的 是否可以从头开始创建它 或者我是否需要使用一些 API 我的要求仅限于我的网站用户 可以说基于内联网 请帮我 要进行文字聊天 人
  • 嵌套异步/等待 Nodejs

    似乎无法弄清楚为什么这对我不起作用 我有一个父函数 它对子加载进程执行 AWAIT LOAD 进程又调用另一个名为 LOADDATA 的 AWAIT 所以基本上是这样的 module exports async function try a
  • 将 HTML 表格导出到 Excel

    我在 ASP NET MVC 视图页面上有 HTML 表 现在我必须将该表导出到 Excel 1 我使用部分视图 Inquiries ascx 来显示数据库中的表数据 使用LINQ to Entity 2 我还使用了 UITableFilt
  • 当从属文本框中没有输入文本时,如何让 gridview 显示所有表格行?

    下面的代码可以正常工作 并根据文本框中输入的文本过滤我的网格视图 当我的文本框中没有输入任何文本时 我没有得到任何结果 并且无法理解为什么 我的问题 如何让gridview显示all当文本框中没有输入文本时表行 MSSQL Search n
  • 将数据库中的用户 ID 添加到 Codeigniter 中的会话数据中?

    我是 CodeIgniter 的新手 在从数据库添加用户 ID 用户登录后 到会话数据时遇到问题 这是我的代码问题 之前可能会在 SOF 上被问到 在付出了所有努力之后 我问这个 登录模型
  • 我可以在 Play Framework 2.x (Scala) 中进行异步表单验证吗?

    我正在努力了解 Play 的异步功能 但发现在异步调用适合的地方以及框架似乎密谋反对其使用的地方存在很多冲突 我的例子与表单验证有关 Play 允许定义临时约束 请参阅文档 val loginForm Form tuple email gt
  • 将 Windows 窗体应用程序转换为 Asp.net

    我问的是 您之前使用的将 C Windows 窗体应用程序转换为 ASP NET 的最佳工具是什么 我已经关于这个主题 发现了很多工具 但我希望有人根据他的使用情况推荐最好的工具 我真的不建议使用工具来进行转换 Web 应用程序和 WinF
  • 防止exe文件上传到网站

    有人可以告诉我如何防止 exe 文件在网站上上传 即使 exe 文件位于 zip 文件内 新文件夹中的 exe 文件 然后压缩并上传新文件夹 允许用户上传文件 如果是 ZIP 并通过解压存档并评估其内容来进行服务器端检查
  • 什么可以解释托管堆上超过 5,000,000 个 System.WeakReference 实例?

    我一直在针对生产 ASP NET Web 应用程序运行负载测试 并且看到在堆上创建了大量 System WeakReference 在大约 15 分钟内 负载管理堆内存已飙升至大约 3GB 并且我有大约 5 000 000 个对 Syste
  • 使用 asp.net 发送 20,000 多封电子邮件

    我正在编写一个应用程序 需要向从我们的数据库中选择的学生发送大量电子邮件 每封电子邮件都将进行个性化 包括他们的姓名 学习课程等 因此需要一次发送一个 我可以在 SmtpClient 上循环执行此操作 但我担心我尝试发送的数字最终会遇到超时
  • 实体框架 4 DB 优先依赖注入?

    我更喜欢创建自己的数据库 设置索引 唯一约束等 使用 edmx 实体框架设计器 从数据库生成域模型是轻而易举的事 现在我有兴趣使用依赖注入来设置一些存储库 我查看了 StackOverflow 上的一些文章和帖子 似乎重点关注代码优先方法
  • 恢复上传文件控制

    我确实阅读了以下帖子 C 暂停 恢复上传 https stackoverflow com questions 1048330 pause resume upload in c 使用 HTTP 恢复上传 https stackoverflow

随机推荐

  • 如何为 GKE 服务创建 Google CDN

    我已经在 GKE kubernetes 上部署了一个 WordPress 网站 我可以像 mysite test com 这样从互联网访问我的网站 并且工作起来就像一个魅力 现在我想使用Google CDN来加速访问 我尝试过使用 Ingr
  • 如何更改 Visual Code Studio 提交作者

    我不知道为什么 但我的 Visual Studio Code 显示错误的提交作者姓名 我正在尝试更改提交的作者 我怎样才能做到这一点 我已经有很多东西了 但没有运气 这是我尝试过的 由于我有三个提交 所以我尝试了git rebase i H
  • 如何排除“git diff-index”中的文件

    我正在使用 git 预提交挂钩来检查提交 预提交脚本基本上做了一件事 exec git diff index check cached HEAD 它还做了一些其他事情 但它们与本次讨论无关 问题是 我的存储库中有各种各样的文件 但并非所有文
  • 通过单击按钮旋转/翻转两种布局

    我有两个布局 xml 文件 我想从一个页面翻转到另一个页面 这两个 xml 文件是 main xml 和 register xml 如果我单击 main xml 中的登录按钮 页面应该翻转并显示 register xml并且在 regist
  • 在 Anaconda 中安装 Kivy

    我正在尝试在 Windows 7 的 Anaconda 3 4 1 1 中安装 Kivy 但我找不到合适的用户指南来指导我如何安装 但到目前为止 我能够在链接上找到在 OS X 上安装它的说明https github com kivy ki
  • matplotlib 中的曲面图

    我有一个 3 元组列表 表示 3D 空间中的一组点 我想绘制一个覆盖所有这些点的曲面 The plot surface函数在mplot3d包要求参数 X Y 和 Z 为二维数组 是plot surface绘制曲面的正确函数以及如何将数据转换
  • 使用 Ruby Date 类处理天文数据

    大约太阳正午 lw 88 743 my longitude jdate Date ordinal to jd Time now year Time now yday n jdate 2451545 0 0009 lw 360 round l
  • 如何在x86汇编编程中表示诸如FFFFFFBB之类的十六进制值?

    我正在学习 x86 内联汇编编程 我想写mov ecx FFFFFFBB 但是编译器无法识别它 像这样的十六进制数字应该如何在内联汇编代码中编写 这取决于您的汇编器的风格 美国电话电报公司 movl 0xFFFFFFBB ecx Intel
  • PyCharm:FooTestCase 不是测试,但 FooTest 是

    如果我打电话给我的测试班FooTestCase我没有看到绿色播放按钮来运行测试 如果我删除 Case 并调用它FooTest出现绿色播放按钮 为什么会发生这种情况 我想要有播放按钮来运行 FooTestCase 的测试 None
  • ANDROID SQLITE 检查表是否有数据

    我想检查一下我的表是否有记录 这是我尝试过的 if cursor null cursor moveToFirst if cursor getInt 0 0 Toast makeText getBaseContext No records y
  • 为什么编译器会生成这个程序集?

    在逐步执行一些 Qt 代码时 我遇到了以下情况 功能QMainWindowLayout invalidate 有以下实现 void QMainWindowLayout invalidate QLayout invalidate minSiz
  • Kendo UI 数据源 - 过滤相关数据

    我在过滤相关数据 多对多 的剑道数据源时遇到问题 我正在使用 ASP NET WebAPI2 和 DataSourceRequest 来捕获服务器上的请求 然后使用 IQueryable 上的 ToDataSourceResult 扩展方法
  • Laravel 4 调用未定义的方法 Illuminate\Database\Eloquent\Collection::links()

    我尝试实现书中的代码 学习 Laravel 4 应用程序开发 http www packtpub com learning laravel 4 application development book 一个简单的使用 CRUD 应用程序如下
  • boost::process::child 关闭输入流后不会退出

    在下面的示例中 我尝试将一些数据写入子进程 该子进程处理数据并将其写入文件 关闭流后 父进程无限期地等待子进程完成 我不知道如何表明我已完成写入数据 并希望子进程停止读取并完成它正在做的任何事情 根据文档调用终止会发送一个SIGKILL h
  • 如果没有 iPad,如何在 iPad 上测试我的网站?

    我收到评论说我的一位网站 tumblr 主题 http www tumblr com theme 11037在 iPad 上崩溃 我没有 iPad 所以我想知道您将如何在 iPad iPhone 或任何其他智能手机上测试您的网站 如果您使用
  • JQuery:帮助使用 .each() 和 .append() 将图片添加到 HTML

    需要修复的简单错误 我不知道出了什么问题 我需要将同一张图片附加到 HTML 中的多个 五个 div 由于某种原因 我的代码将同一张图片附加到每个 div 五次 更清楚地说 五个 div 中的每一个都需要一张图片 现在 这五个人每人都有五张
  • 在另一台计算机上运行 C# 程序时出现 System.IO.FileLoadException

    我目前正在开发一个 C WPF 项目 该项目使用 MySQL Data 和 System Data Sqlite dll 以及其他几个 该项目是一个 Net 4 项目 在我的开发机器上运行没有问题 我创建了一个 MSI 安装程序包 当我添加
  • 对 geom_tile 内的数据进行排序

    我有一个数据框 我想生成一个geom tile 从中绘制 但我希望图表的排序不是基于字母顺序 而是基于该数据框中的变量 structure list V1 c a y w p v h i V2 c r w q m l q g V3 c 5
  • Visual Studio 2010 Express 是否会阻止源代码管理插件?

    我尝试在我的 Visual Studio 2010 Express 上安装此插件 http gitscc codeplex com http gitscc codeplex com 但我在插件存储库中找不到它 插件的 源代码管理 类别是空的
  • 从 PageAsyncTask 调用的方法中,HttpContext.Current 为 null

    我有一个场景 我有一个页面 单击按钮即可打开一个对话框 在单击按钮打开的对话框表单中 我可以从选定的 txt 文件中读取数据列表并构建查询并将数据添加到某些数据库表 由于可能存在大量数据 此过程可能需要很长时间 因此用户在上传完成之前将无法