gpt4 book ai didi

asp.net - 当 ConcurrencyMode = Multiple 时,两个并行 WCF 请求是否可以由同一线程处理

转载 作者:行者123 更新时间:2023-12-02 15:12:44 25 4
gpt4 key购买 nike

我有一个具有 ServiceBehavior(InstanceContextMode = InstanceContextMode.Single, ConcurrencyMode = ConcurrencyMode.Multiple) 的 WCF 服务。我想使用 ThreadStatic 变量来存储数据。

我开始担心是否有可能对相同或不同的操作合约的两个并行请求由同一线程服务器端处理,因为如果发生这种情况,我的 ThreadStatic 变量将被覆盖。(即,类似于 HttpHandlers 和 HttpModules 之间的线程更改) ASP.NET)

我使用相同的 ServiceBehaviour 和 maxConcurrentCalls="2"制作了一个尖峰服务。之后,一个 wcf 客户端通过 50 个并行请求调用该服务,我的担心并没有发生。但这并不是 100% 的证据。

提前致谢!

最佳答案

无论 ConcurrencyMode 如何,当您的请求终止且线程返回到线程池时,ThreadStatic 值都将持续存在。同一线程可以重复用于后续请求,因此将能够看到您的 ThreadStatic 值。

显然,对于两个并发请求来说,情况并非如此,因为根据定义,它们将在不同的线程上执行。

来自评论:

Also by definition MSDN says: 'The service instance is multi-threaded. No synchronization guarantees are made. Because other threads can change your service object at any time, you must handle synchronization and state consistency at all times.' So it is not so obvious:)

这意味着多个请求可以同时访问服务类的单个实例。因此,您需要处理对服务类实例成员的任何访问的同步。

但是,根据定义,ThreadStatic 成员一次仅由一个线程(因此也就一个请求)使用,因此不需要同步。

关于asp.net - 当 ConcurrencyMode = Multiple 时,两个并行 WCF 请求是否可以由同一线程处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12490943/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com