gpt4 book ai didi

multithreading - WCF 如何处理多个客户端对服务器的调用?

转载 作者:行者123 更新时间:2023-12-01 11:06:57 25 4
gpt4 key购买 nike

想要清楚地了解 WCF 的工作原理。假设一个 WCF 服务公开了一个函数 A。现在客户端创建了 5 个线程,并且在每个线程中使用不同的参数调用函数 A。

我认为这应该会发生——函数 A 的新实例将在每个线程调用该函数时创建。有人可以证实这一点。我写了一个 POC,它没有这样做,它给出了不一致的结果。

最佳答案

这取决于您通过实现服务契约的类的 ServiceBehavior 属性进行的服务配置:

[ServiceBehavior(
InstanceContextMode = InstanceContextMode.PerSession,
ConcurrencyMode = ConcurrencyMode.Multiple)]

通过参数 InstanceContextMode,您可以告诉 WCF 您希望如何托管您的服务:

  • 单一:将创建您的服务类的一个实例,它接收所有服务调用
  • PerSession:为每个连接的客户端创建一个新实例
  • PerCall(默认):对于每个客户端的每次调用都会创建一个新实例

下一件事是同步,当一个宿主对象接收到并行操作调用时。您可以使用 ConcurrencyMode 参数控制行为:

  • 单个(默认):WCF 序列化所有操作,因此您的服务实例一次只执行一个操作调用或不执行任何操作调用。
  • 可重入:WCF 将所有操作调用直接委托(delegate)给您的服务实例,但在服务操作中同步调用另一个 WCF 服务(我认为很少使用)。
  • 多个:WCF 将所有操作调用直接委托(delegate)给您的服务实例,无需同步。您必须自己担心同步问题。

关于multithreading - WCF 如何处理多个客户端对服务器的调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4517677/

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