Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# CallContext正向之前设置的数据前进_C#_Wcf Data Services_Threadstatic_Callcontext - Fatal编程技术网

C# CallContext正向之前设置的数据前进

C# CallContext正向之前设置的数据前进,c#,wcf-data-services,threadstatic,callcontext,C#,Wcf Data Services,Threadstatic,Callcontext,在这种情况下,我看到线程的CallContext在后续调用中向前携带数据 假设我有一个简单的API,当需要时,它将使用以下方法将一个数据条目设置到CallContext中: // entry to the API execution within OnStartProcessingRequest method of DataService if(CallContext.LogicalGetData("data") != null) CallContext.LogicalSetData("

在这种情况下,我看到线程的CallContext在后续调用中向前携带数据

假设我有一个简单的API,当需要时,它将使用以下方法将一个数据条目设置到CallContext中:

// entry to the API execution within OnStartProcessingRequest method of DataService
if(CallContext.LogicalGetData("data") != null)
    CallContext.LogicalSetData("data", someValue)
print("data " + CallContext.LogicalGetData("data"))
当我在一些API查询之后看到日志时,我会看到类似的日志

|线程|日志|
|237 |数据23 |
|145 |数据19 |
|872 |数据78 |
|237 |数据23 |

我关心的是,为什么ID为237的线程会拾取旧数据?i、 e.23
我确信控件没有进入LogicalSetData代码块,因为它已经有了数据

我不知道为什么会这样?有人能帮我吗


该服务是一个WCF数据服务。正在从postman REST客户端进行调用。

考虑切换到
OperationContext
,因为它是用于存储特定请求数据的内置和自然上下文。
CallContext.GetData将从同一线程获取通过SetData设置的数据。通过CallContext.LogicalSetData存储的数据被视为本地“逻辑线程”。也就是说,通过CallContext.LogicalSetData存储的任何数据都将“流”到任何子线程。如果在同一线程或任何子线程中调用CallContext.LogicalGetData,则将获得该线程(或父线程)调用CallContext.LogicalSetData时存储的数据。更好的描述。
我找不到在每次请求启动时CallContext必须干净的任何信息,但是我找到了描述自定义ICallContextInitializer实现的信息。它说:

在默认情况下,WCF比其他堆栈(如ASP.NET)更节省 说到保护国家。保存和恢复大量 线程本地设置需要时间,无论您是否 是否使用了这些设置。WCF试图不做那么多 代表你,这样你就不必为清理工作付钱,除非你 使用这些功能。但是,它确实为您提供了必要的挂钩 安排在适当的时间进行清理


虽然此链接可以回答问题,但最好在此处包含答案的基本部分,并提供链接供参考。如果链接页面发生更改,仅链接的答案可能无效。-@我添加了一个链接,因为它描述了相同的情况。但答案过去是,现在也是:“考虑切换到操作上下文”。没有更多,没有隐藏。现在删除链接。我想没关系。@d\f谢谢!目前,在发送回复之前,我正在清理CallContext。很好。但是将考虑使用操作上下文来实现它。