在 WCF 服务中使用 async/await 时,OperationContext.Current 在第一次等待后为 null

2024-03-03

我在 .NET 4.5 中使用异步/等待模式来实现 WCF 中的一些服务方法。 服务示例:

合同:

[ServiceContract(Namespace = "http://async.test/")]
public interface IAsyncTest
{
    Task DoSomethingAsync();
}

执行:

MyAsyncService : IAsyncTest
{
    public async Task DoSomethingAsync()
    {
        var context = OperationContext.Current; // context is present

        await Task.Delay(10);

        context = OperationContext.Current; // context is null
    }
}

我遇到的问题是首先之后await OperationContext.Current回报null我无法访问OperationContext.Current.IncomingMessageHeaders.

在这个简单的示例中,这不是问题,因为我可以捕获之前的上下文await。但在现实世界的情况下OperationContext.Current正在从调用堆栈的深处访问,我真的不想为了进一步传递上下文而更改大量代码。

有没有办法获取操作上下文await点而不手动将其传递到堆栈中?


不幸的是,这不起作用,我们将在未来的版本中看到修复方案。

同时,有一种方法可以将上下文重新应用到当前线程,这样您就不必传递对象:

    public async Task<double> Add(double n1, double n2)
    {

        OperationContext ctx = OperationContext.Current;

        await Task.Delay(100);

        using (new OperationContextScope(ctx))
        {
            DoSomethingElse();
        }
        return n1 + n2;
    }  

在上面的例子中,做点别的事()方法将可以按预期访问OperationContext.Current。

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

在 WCF 服务中使用 async/await 时,OperationContext.Current 在第一次等待后为 null 的相关文章

  • 从同步上下文调用异步方法

    我在代码中通过 HTTP 调用服务 最终使用 HttpClient SendAsync 方法 然后从 WebAPI 控制器操作调用此代码 大多数情况下 它工作得很好 测试通过 但是当我在 IIS 上部署时 我遇到了死锁 因为异步方法调用的调
  • Node.js Async/Await 模块导出 [重复]

    这个问题在这里已经有答案了 我对模块创建有点陌生 想知道 module exports 并等待异步函数 例如 mongo connect 函数 完成并导出结果 在模块中使用 async await 正确定义了变量 但是当尝试通过要求模块来记
  • 如何将 SyndicateElementExtension 添加到 SyndicateItem

    使用 NET System ServiceModel Syndicate 类 我想向 SyndicateItem 添加一个新的 SyndicateElementExtension 它将导出以下 XML
  • .NET 远程处理回调

    是否可以通过远程处理传输回调 我想做一些类似的事情myRemoteObject PerformStuff x gt Console WriteLine x 如果没有 我将如何实现等效的功能 Edit 我知道 Remoting 已被 WCF
  • 如何在 C# / .NET 中创建内存泄漏[重复]

    这个问题在这里已经有答案了 可能的重复 托管代码中是否可能存在内存泄漏 特别是 C 3 0 https stackoverflow com questions 6436620 is it possible to have a memory
  • 如何在 SqlDataReader.Read() 期间从死锁异常中恢复

    我的 NET 应用程序的事件日志显示 它在从 Sql Server 读取数据时偶尔会出现死锁 这种情况通常非常罕见 因为我们已经优化了查询以避免死锁 但有时仍然会发生 过去 我们在调用ExecuteReader函数在我们的SqlComman
  • Azure CloudTable 线程安全吗?

    我正在使用 Storage SDK 2 0 从不同线程 ASP NET 应用程序 写入 Azure 表存储 Is 云表 object 线程安全 我是否可以仅初始化 CloudStorageAccount CloudTableClient 和
  • 当进程等待完成时如何显示加载控件?

    我决定使用这个第三方组件在我的 Windows 窗体中制作一个简单的加载控件 http www codeproject com Articles 14841 How to write a loading circle animation i
  • 如何在 C# 中向类、方法、属性等添加文档工具提示?

    不确定我的说法是否正确 但我想开始向我的类 方法 属性等添加一些文档 我know这可能是非常明显的 但我从未真正学会过 我不知道从哪里开始 只是为了澄清 每当您滚动某个类 或方法 属性等 时 它都会在 Visual Studio 中显示一个
  • 获得新的 access_token 后,如何更新我的 cookie?

    使用刷新令牌获取新的访问令牌后 我想使用该访问令牌更新我的客户端 cookie 我的客户端能够使用 ajax 登录并调用我的 REST API 但是当第一次授权过期时 API 调用自然不再起作用 我有一个 NET Web 应用程序 它使用自
  • 有没有基于 WPF 的 Markdown 渲染器? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我们有基于 WPF 的应用程序 我们有单独的字符串存储库 其中的文本在网络中进行编辑 在我们的 WPF
  • LinqToSql 声明和实例化 DataContext 最佳实践?

    设置 DataContext 以便在扩展 LinqToSql 类中轻松访问方面的最佳实践是什么 例如 我的 dbml 中有一个 User 实体 我想向该类添加方法 如下所示 Partial Public Class User Public
  • C# 如何使用 CallNtPowerInformation 和 Interop 来获取 SYSTEM_POWER_INFORMATION

    我正在尝试编写一个小程序 该程序作为服务运行并监视用户是否处于活动状态 如果用户空闲 没有鼠标 键盘 一个小时 则某些进程将被终止 如果用户使用 user32 dll 中的 LASTINPUTINFO 运行它 它就可以工作 但它不能作为服务
  • 处理双 NaN 和 Inf 时的 ILASM 问题

    我创建了一个简单的程序 并初始化了双精度类型值 var a double NaN 我使用 Visual Studio 2019 net Framework 4 5 构建项目 并使用 ILDASM exe 版本 4 0 30319 0 将其反
  • WCF 服务中的“即发即忘”

    我在 Azure 上有很多 WCF REST 服务 在某些 WCF 服务中 我向外部服务调用 Http 请求 例如发送电子邮件 短信 对非关键第三方服务的 http 请求 我不希望这阻碍我对客户电话的响应 需要一些关于在这种情况下使用的模式
  • 在 Web 浏览器中禁用 F5 [重复]

    这个问题在这里已经有答案了 可能的重复 禁用浏览器的后退按钮 https stackoverflow com questions 961188 disable browsers back button 如何禁用浏览器上的 F5 刷新 htt
  • 如何在 Windows CE 中使用 VB.Net 访问条码扫描仪

    最近我被要求开发一个应用程序摩托罗拉 MK4000 http www motorola com Business US EN Business Product and Services Micro Kiosks Micro Kiosks M
  • 从另一个 FORM 中取回隐藏的 FORM

    我有两种形式Form1 and Form2 我正在打开Form2 from Form1 on button Click Form2 obj2 new Form2 this Visible false obj2 Show 然后我想回来Form
  • SQL 查询将文本数据存储在 Varbinary(max) 中

    有没有办法让 varbinary 在 SQL Server 中接受文本数据 这是我的情况 我有相当大量的 XML 我计划以 压缩 格式存储它们 这意味着 Varbinary 但是 当我进行调试时 我希望能够翻转配置开关并以纯文本形式存储 以
  • Nhibernate:连接表并从其他表获取单列

    我有以下表格 create table Users Id uniqueidentifier primary key InfoId uniqueidentifier not null unique Password nvarchar 255

随机推荐

  • 如何防止.exe类型文件在网站上传?

    假设我们有一个 example exe 文件 我们首先将该文件放入一个新文件夹中 然后使用任何压缩软件压缩该文件夹 我们可以阻止压缩文件夹在网站中上传吗 我们怎样才能做到这一点 你不能prevent它 因为在提交之前你无法知道浏览器将要提交
  • 为什么我获得了未分配内存的读写权限?

    我对下面代码片段的行为感到困惑 我已经声明了一个 char 指针并将其指向分配大小 1 sizeof char 的内存位置 char src src char malloc 1 sizeof char strcpy src Copy tex
  • 对 Rhino Mocks 中的方法调用进行计数

    所以 我想用比 An Ounce 或 At Least Once 更具体的方法来计算 Rhino Mocks 中的方法调用 有什么机制可以做到这一点吗 诀窍是使用 Repeat Times n 其中 n 是次数 令人惊讶的是 即使该方法的调
  • 如何在活动之前增加 Azure 数据工厂中的参数?

    我正在访问一个 RESTful API 该 API 使用 HTTP 连接器以 50 组为一组进行分页 REST 连接器似乎不支持客户端证书 因此我无法在其中使用分页 我有一个名为的管道变量SkipIndex默认为 0 在 Until 循环内
  • 行为 3 中如何在上下文之间进行通信?

    我无法再在版本 3 中使用 getMainContext 和 getSubcontext alias 版本 3 中上下文之间的通信方式是什么 上下文特征是唯一的方式吗 behat yml default suites guest featu
  • Android 中的电话选择器 api

    我正在尝试使用电话选择器 API 获取电话号码 但得到空响应 这是我的代码 GoogleApiClient googleApiClient new GoogleApiClient Builder this addApi Auth CREDE
  • Schema.org 中的产品列表

    我读了这个谷歌文档 https developers google com search docs data types products 它说我们不使用列表中的产品 那么对于产品列表 具有多页的类似产品类别 如 鞋子 建议使用哪种模式 我
  • 静态和粘性固定标题转换故障

    我创建了一个基于滚动的粘性标题 但有两个问题 上下滚动时 背景有跳跃 我希望你 明白我的意思 有时两个标题 div 一起出现 我该如何解决这个问题 提前致谢 JSFiddle 演示 http jsfiddle net ezBXc CSS m
  • 在 swift 中使用 NSClassFromString 实例化嵌套类

    我有一个如下定义的嵌套类 objc class A objc class B 我需要实例化A B using NSClassFromString 我能够在简单的课程中做到这一点A但是当我附加到NSClassFromString参数 Bstr
  • 将 GitLab 与 TeamCity 集成

    从 GitLab 7 6 或更高版本开始 有一个新选项可以直接从 GitLab 项目使用 TeamCity 在设置中有这样的消息 Teamcity 中的构建配置必须使用构建格式编号 build vcs number 您还需要配置对所有 分支
  • Android:支持多屏

    我正在尝试在Android 中制作一个应用程序 我希望它应该能够在不同屏幕尺寸的多部手机上运行 所以我研究了支持开发者多屏 http developer android com guide practices screens support
  • symfony 中“无法设置验证器上的enable_annotations,因为注释支持被禁用”

    我刚刚创建了一个包 成功 当我准备通过控制台创建一个实体时 发生了这种情况 也使用clear cache 逻辑异常 验证器上的 enable annotations 不能设置为注释 支持被禁用 mi config yml 看起来像 fram
  • 使用 OAuth 和单页应用程序实施 Web API

    我们正在开发一个 API 和一个单页应用程序 这是它未来更可能的使用者之一 我们已经开始使用 Web API 并且基本上实现了一个与 John Papa 在他的pluralsight 课程中制作的系统非常相似的系统 名为 使用 HTML5
  • 尝试使用 Fluent-ffmpeg 将帧提取到内存

    我正在尝试使用 FFmpeg 将帧直接提取到内存中 以节省将帧写入磁盘的时间 因为我不需要它 我尝试运行this https stackoverflow com questions 62050534 how to read video fr
  • 使用 $(GitVersion.NuGetVersion) 标记源会创建带有变量名称而不是值的标签

    成功构建后 将标签格式配置为 GitVersion NuGetVersion 结果标签设置为 GitVersion NuGetVersion 不是该变量的实际扩展值 在构建输出日志记录中 有 2 个部分 计划 构建和完成构建 据推测 一旦构
  • Pandas 计算列中负值的序列

    我在 Pandas Dataframe 列 B 中的值可以是正数或负数 data 5889 25 738 0 5896 5 49 0 5897 5 130 0 5899 5 266 0 5903 75 126 0 5903 75 512 0
  • 快速停止 CABasicAnimation

    我使用 CABasicAnimation 来制作脉冲帧等动画视图 有代码 extension UIView animate the border width func animateBorderWidth toValue CGFloat d
  • Pycharm 中的 Jupyter - 当数据框太宽时,数据框不显示,不出现水平滚动选项

    当我在 Pycharm 中使用 jupyter 笔记本从单元格输出数据帧时 除非数据帧的宽度适合窗口 否则它不会显示 因此 在宽度比窗口宽度宽的情况下 只会产生一条白线 而我期望显示部分数据框以及水平滚动条 运行以下命令 import pa
  • 何时使用 rlang::ensym() 而不是 rlang::sym()?

    我从文档中可以看到rlang enquo and rlang quo 用于不同的上下文 因此 我用了rlang enysm 最近在函数声明中 见下文 然而 在另一个 SE 函数调用中 我收到了一个意外的错误 我猜这与惰性求值有关 如果我这样
  • 在 WCF 服务中使用 async/await 时,OperationContext.Current 在第一次等待后为 null

    我在 NET 4 5 中使用异步 等待模式来实现 WCF 中的一些服务方法 服务示例 合同 ServiceContract Namespace http async test public interface IAsyncTest Task