- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试将使用 CallContext.LogicalGet/SetData 的现有 .net 应用程序迁移到 .net 核心。
当 Web 请求命中应用程序时,我将 CorrelationId 保存在 CallContext 中,并且每当我稍后需要在轨道上记录某些内容时,我都可以轻松地从 CallContext 中收集它,而无需将其传输到任何地方。
由于 CallContext 不再受 .net 核心支持,因为它是 System.Messaging.Remoting 的一部分,有哪些选项?
我看到的一个版本是可以使用 AsyncLocal ( How do the semantics of AsyncLocal differ from the logical call context? ),但看起来好像我必须将这个变量传输到整个目的,这并不方便。
最佳答案
当我们将库从 .Net Framework 切换到 .Net Standard 并且不得不替换 System.Runtime.Remoting.Messaging
时遇到了这个问题CallContext.LogicalGetData
和 CallContext.LogicalSetData
.
我按照本指南替换了方法:
http://www.cazzulino.com/callcontext-netstandard-netcore.html
/// <summary>
/// Provides a way to set contextual data that flows with the call and
/// async context of a test or invocation.
/// </summary>
public static class CallContext
{
static ConcurrentDictionary<string, AsyncLocal<object>> state = new ConcurrentDictionary<string, AsyncLocal<object>>();
/// <summary>
/// Stores a given object and associates it with the specified name.
/// </summary>
/// <param name="name">The name with which to associate the new item in the call context.</param>
/// <param name="data">The object to store in the call context.</param>
public static void SetData(string name, object data) =>
state.GetOrAdd(name, _ => new AsyncLocal<object>()).Value = data;
/// <summary>
/// Retrieves an object with the specified name from the <see cref="CallContext"/>.
/// </summary>
/// <param name="name">The name of the item in the call context.</param>
/// <returns>The object in the call context associated with the specified name, or <see langword="null"/> if not found.</returns>
public static object GetData(string name) =>
state.TryGetValue(name, out AsyncLocal<object> data) ? data.Value : null;
}
关于.net-core - .NET Core 等效于 CallContext.LogicalGet/SetData,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42242222/
在这种情况下,我看到线程的 CallContext 正在后续调用中转发数据。 考虑我有一个简单的 API,当它被查询时,将使用以下方式将一个数据条目设置到 CallContext 中: // entr
在 MVC 应用程序中,我需要存储一些用户数据以验证他是否拥有访问某些页面的所有权限(比如他是某个对象的所有者等)。我尝试在我的一项服务中添加一个私有(private)静态字段来处理用户数据,并添加一
我正在使用 Visual Studio 2015 和 .Net 我遇到了一个有点奇怪的问题。我有一个包含两个项目的 C# 解决方案。一个是标准 WPF 应用程序,另一个是 WPF 用户控件库。 WPF
根据我已阅读的所有内容,以下测试方法应该会通过。我试图理解它失败的原因。私有(private)异步方法中的第一个断言按预期通过。但是,一旦任务返回并等待。在 CallContext 中设置的值现在在检
CallContext 和 ThreadStatic 有什么区别? 我了解到,在 ASP.NET 环境中,存储在 CallContext 中的数据可以在整个请求期间保持不变,直到它结束,而 Threa
我有以下测试 [Test] public void aaa() { CallContext.LogicalSetData("aa", "1"); Action parallelMeth
根据我使用的是基于 async/await 的代码还是基于 TPL 的代码,我得到了关于清理逻辑 CallContext 的两种不同行为。 如果我使用以下异步/等待代码,我可以完全按照预期设置和清除逻
我目前正在使用 Threadlocal 来保存当前用户的 ID,以便根据每个用户的 Web 请求在整个应用程序中使用。我无法在较低环境中访问 HttpContext,但想访问静态 UserId 而无需
Asp.Net Core 是否跨请求保留 CallContext? 我们有一个将上下文属性(用户名)附加到线程的用例,它可以从我们的日志框架(NLog,MDLC)中提取。据我所知,MDLC 使用 Ca
我注意到 CallContext.LogicalSetData/LogicalGetData 没有按照我预期的方式工作。在 async 方法中设置的值会被恢复即使没有异步或任何类型的线程切换,无论如何
CallContext API 有LogicalGetData 和GetData,但是MSDN Documentation 并没有做太多解释两者之间的区别,并且当它们不同时。 有什么想法吗? 最佳答案
在使用 asp.net Web API 时,能否在整个请求中依赖 CallContext? 我已阅读decade-old blog post我不确定它是否仍然适用(如要求 there )。 假设 Th
我正在尝试将使用 CallContext.LogicalGet/SetData 的现有 .net 应用程序迁移到 .net 核心。 当 Web 请求命中应用程序时,我将 CorrelationId 保
各位, 假设我使用线程 10、11、12 中的 CallContext.SetData() 存储对象 Car 的三个新实例。这些线程完成执行。然后我执行另一个多线程操作(可能与第一个操作不同),该操作
AsyncLocal<>在 .NET Core 中,如 CallContext.LogicGetData/LogicSetData .怎么样GetData和 SetData ? Thread.GetD
我正在尝试根据自定义上下文返回不同的提供程序。鉴于以下 public interface IProvider { string WhoAreYou(); } 还有两个供应商 namespace
根据 this awesome blog ,即使使用 async/await(只要使用 .NET 4.5 和不可变数据),我们也可以安全地从 CallContext 的 LogicalContext
错误:无法从程序集“mscorlib,Version=4.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089”加载类型“System.Runti
我知道使用这些方法设置的 LogicalCallContext 会流向新线程,如果您使用像 ThreadPool.QueueUserWorkItem。问题是,当线程池重新使用具有此对象的线程时,逻辑调
我有这样的 SQSClient 设置: var client = new AmazonSQSClient(); new AWSSdkTracingHandler(AWSXRayRecorder.Ins
我是一名优秀的程序员,十分优秀!