gpt4 book ai didi

.net - WCF 1 个 session = 1 个线程?

转载 作者:行者123 更新时间:2023-12-04 18:24:25 25 4
gpt4 key购买 nike

如果我运行我的 WCF 服务(托管在 II7 中)并在 contextinstance 上使用 PerSession,一个 session 是否与一个线程相同?当客户端没有进行任何调用但在服务上有 session 时会发生什么? session 是否仍在线程中?

如果我更改为 PerCall,我假设每次调用都会获得一个线程,并且在调用结束时会返回该线程。

我在哪里可以找到这些信息?

最佳答案

相信你能找到答案和很好的解释here .

乍一看,您会使用 电话 出于可扩展性的原因和每 session 对于通常的网络场景。

  • 使用 时每 session 一旦客户端第一次调用服务实现的实例将保留在服务器上。每个客户端都有自己的 session ,只在一个线程上执行 (!) 每个客户。 所以,是的 1 Session == 1 Thread 默认 .但是您也可以更改并发模式 ,因此在一个 session 中客户端可以进行许多并发调用。
  • 如果是 电话 服务实例将在调用完成后立即释放。

  • [编辑(与大卫尼尔森讨论后)]:

    (!) 这并不意味着相同的线程!这只意味着 ThreadPool 将使用可用线程来运行服务代码。但是如果启动 1000 个并发客户端,ThreadPool 会分配很多线程,这涉及到资源,比如内存。

    使用代码解释线程使用:

    我创建了简单的计算器服务来展示 WCF 服务是如何工作的。
    [ServiceBehavior(InstanceContextMode = InstanceContextMode.PerSession)]
    public class CalculatorService : ICalculatorService
    {
    private int _threadIdOnCreating = Thread.CurrentThread.ManagedThreadId;
    public int AccumulatedValue { get; private set; }
    public int Accumulate(int valueToAdd)
    {
    AccumulatedValue += valueToAdd;

    Console.WriteLine(
    string.Format("Accumulated: {0}. ThreadIdOnServiceCreating:{1} CurrentThreadId:{2}",
    AccumulatedValue, _threadIdOnCreating, Thread.CurrentThread.ManagedThreadId));

    return AccumulatedValue;
    }
    }

    我使用参数 2 运行 Accumulate 方法五次,然后创建新的客户端代理并执行相同操作。
    下面是输出,证明服务器保留了服务实现的实例(创建时的threadId),但是方法在不同的线程上运行,取自ThreadPool。
    I'm calculator
    Accumulated: 2. ThreadIdOnServiceCreating:6 CurrentThreadId:6
    Accumulated: 4. ThreadIdOnServiceCreating:6 CurrentThreadId:7
    Accumulated: 6. ThreadIdOnServiceCreating:6 CurrentThreadId:6
    Accumulated: 8. ThreadIdOnServiceCreating:6 CurrentThreadId:7
    Accumulated: 10. ThreadIdOnServiceCreating:6 CurrentThreadId:6
    Accumulated: 2. ThreadIdOnServiceCreating:9 CurrentThreadId:9
    Accumulated: 4. ThreadIdOnServiceCreating:9 CurrentThreadId:6
    Accumulated: 6. ThreadIdOnServiceCreating:9 CurrentThreadId:9
    Accumulated: 8. ThreadIdOnServiceCreating:9 CurrentThreadId:6
    Accumulated: 10. ThreadIdOnServiceCreating:9 CurrentThreadId:8

    关于.net - WCF 1 个 session = 1 个线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10000248/

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