将主体保留在排队的后台工作项中

2024-03-16

我正在使用 ASP.Net Web API 2 / .Net 4.5.2。

我试图在对后台工作项进行排队时保留调用主体。为此,我正在努力:

Thread.CurrentPrincipal = callingPrincipal;

但是当我这样做时,我得到一个 ObjectDisposeException:

System.ObjectDisposeException:安全句柄已关闭

如何将当前主体保留在后台工作项中?
我可以以某种方式复印校长吗?

public void Run<T>(Action<T> action)
{
    _logger.Debug("Queueing background work item");
    var callingPrincipal = Thread.CurrentPrincipal;
    HostingEnvironment.QueueBackgroundWorkItem(token =>
    {
        try
        {
            // UNCOMMENT - THROWS EXCEPTION
            // Thread.CurrentPrincipal = callingPrincipal;
            _logger.Debug("Executing queued background work item");
            using (var scope = DependencyResolver.BeginLifetimeScope())
            {
                var service = scope.Resolve<T>();
                action(service);
            }
        }
        catch (Exception ex)
        {
            _logger.Fatal(ex);
        }
        finally
        {
            _logger.Debug("Completed queued background work item");
        }
    });
}

事实证明ClaimsPrincipal现在有一个复制构造函数。

var principal = new ClaimsPrincipal(Thread.CurrentPrincipal);

这似乎解决了问题,同时保留了所有身份和声明信息。完整功能如下:

public void Run<T>(Action<T> action)
{
    _logger.Debug("Queueing background work item");
    var principal = new ClaimsPrincipal(Thread.CurrentPrincipal);

    HostingEnvironment.QueueBackgroundWorkItem(token =>
    {
        try
        {
            Thread.CurrentPrincipal = principal;
            _logger.Debug("Executing queued background work item");
            using (var scope = DependencyResolver.BeginLifetimeScope())
            {
                var service = scope.Resolve<T>();
                action(service);
            }
        }
        catch (Exception ex)
        {
            _logger.Fatal(ex);
        }
        finally
        {
            _logger.Debug("Completed queued background work item");
        }
    });
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将主体保留在排队的后台工作项中 的相关文章

随机推荐

  • Azure 删除用户对 API 的同意

    从我的前端应用程序中 当我请求访问令牌时 我传递了两个需要与令牌一起返回的范围 我没有在 Azure 门户中向应用程序授予这些同意 相反 用户必须从弹出窗口明确表示同意 一旦用户授予同意 我就会获得具有所需范围的访问令牌 但如何撤销 Azu
  • 如何优化 testng 和 selenium 测试

    在我的实习中 我必须使用 TestNG 和 selenium 来测试 Web 应用程序 但我有一个问题 有时硒或浏览器由于某种随机原因无法工作 因此工作测试被标记为 失败 为了避免这种情况 我可以使用注释 Test invocationCo
  • jqGrid 动态更改特定行的编辑类型

    继此post https stackoverflow com questions 7535942 solved jqgrid how to set custom editoptions based on initial column val
  • Python-将日期时间列转换为秒[重复]

    这个问题在这里已经有答案了 我有一个日期列 称为 时间 其中包含天 小时 分钟等 timedelta 我在数据框中创建了一个新列 我想创建一个新列 并将 时间 列转换为秒 我确实找到了如何转换列 如何根据现有 timedelta 列的秒数转
  • 如何在Python中执行双线性插值

    我想使用 python 执行线性插值 我想要插入高度的 GPS 点示例是 B 54 4786674627 L 17 0470721369 使用具有已知坐标和高度值的四个相邻点 n 54 5 17 041667 31 993 54 5 17
  • caffe: **group** 参数是什么意思?

    我已阅读有关的文档group param group g 默认 1 如果 g gt 1 我们将每个过滤器的连接限制为输入的子集 具体地 将输入和输出通道分为g组 第i个输出组通道将仅与第i个输入组通道连接 但首先我不明白它们的确切含义 其次
  • 使用 jquery 从批量文本中提取所有电子邮件地址

    我有下面的文字 email protected cdn cgi l email protection assdsdf lt email protected cdn cgi l email protection gt rodnsdfald f
  • 如何对数据记录查询中的结果进行排序

    我正在使用 datomic 和 play 框架 游戏非常精彩 datomic 速度很快 所以总体来说是一个很好的组合 因为 我是 datomic 和数据日志 即查询语言 datomic 使用 的新手 所以我无法对结果进行排序 就像我们一样
  • twitter4j - 通过 ID 获取推文

    当我有推文 ID 和用户 ID 时 如何获取推文 我有一个包含以下行的文件 userID tweetID 我想我应该去 Query query new Query huh QueryResult result twitter search
  • 从 SQL 查询中捕获计数

    C cs 文件 中从 SQL 命令获取计数的最简单方法是什么 SELECT COUNT FROM table name into an int多变的 Use SqlCommand ExecuteScalar http msdn micros
  • CGContextSaveGState:无效上下文 0x0 仅在设备上发生错误

    更新 我正在使用 XCode 7 Beta 和 Swift 2 0 当我尝试在 iPhone 上运行我的应用程序时 出现以下 3 个错误
  • 在 Kubernetes 集群上使用 etcdctl 时出现错误:“证书由未知机构签名”

    我正在运行 minikube 并且正在尝试列出 ETCD 上的密钥 我下载了最新的etcdctl来自github的客户端 https github com etcd io etcd releases download v3 3 18 etc
  • 如何使用Gson将Json转换为Java对象[重复]

    这个问题在这里已经有答案了 假设我有 json 字符串 userId 1 userName Yasir 现在我有一个类 User class User int userId String userName setters and gette
  • 将鼠标悬停在缩略图上即可启动新图像;悬停结束后新图像仍然存在

    我有一个缩略图 将鼠标悬停在该图像上时 附近会出现一个全新的图像 正如预期的那样 挑战缩略图悬停结束后 新图像必须保留 仅当用户将鼠标移开新图像时 新图像才会消失 仅 CSS 解决方案今天对 CSS 进行了几个小时的实验后 我设计出的最佳解
  • 如何在 Sweave 文档的表格中包含超链接?

    我有一个包含超链接的数据框 我想使用它作为可点击链接呈现Sweave 我知道关于xtable 但不确定如何使用它将数据帧的内容视为 LaTeX 命令 一种策略是使用sanitize text function来自print函数于xtable
  • 如何在 Flutter MultiImagePicker 中指定照片的质量?

    我需要上传大量照片并将这些照片发送到数据库 由于照片的质量很高 因此需要相当长的时间来完成和上传每张照片 我不需要非常高质量的照片 所以我需要压缩照片 如果我使用 Flutter MultiImagePicker 类 最好的解决方案是什么
  • “git log --pretty=” 是瓷器命令还是管道命令?

    我正在创建一些脚本和程序 使用以下命令获取提交信息 git log pretty
  • 捆绑安装和捆绑安装之间的区别

    捆绑安装和捆绑安装有什么区别 当我用谷歌搜索时 我发现很多地方都说两者都是别名 这是真的还是有什么区别 是真的 捆绑包和捆绑安装做同样的事情 See here https github com carlhuda bundler blob m
  • 从桌面快捷方式运行命令提示符命令

    是否可以创建一个桌面快捷方式 按下该快捷方式将打开命令提示符并运行预定义的命令 创建一个打开命令提示符并运行命令的快捷方式 是的 您可以创建 cmd exe 的快捷方式 并在其后指定命令 或者 如果您的目标只是以可单击的方式运行命令 则您可
  • 将主体保留在排队的后台工作项中

    我正在使用 ASP Net Web API 2 Net 4 5 2 我试图在对后台工作项进行排队时保留调用主体 为此 我正在努力 Thread CurrentPrincipal callingPrincipal 但是当我这样做时 我得到一个