【发布时间】:2010-12-23 18:37:04
【问题描述】:
想清楚地了解 WCF 的工作原理。 假设一个 WCF 服务公开了一个函数 A。 现在客户端创建了 5 个线程,每个线程调用不同参数的函数 A。
我认为这应该发生 - 函数 A 的每个线程调用都会为该函数创建一个新实例。有人可以证实这一点。 我写了一个 POC,它没有这样做,它给出的结果不一致。
【问题讨论】:
标签: multithreading wcf
想清楚地了解 WCF 的工作原理。 假设一个 WCF 服务公开了一个函数 A。 现在客户端创建了 5 个线程,每个线程调用不同参数的函数 A。
我认为这应该发生 - 函数 A 的每个线程调用都会为该函数创建一个新实例。有人可以证实这一点。 我写了一个 POC,它没有这样做,它给出的结果不一致。
【问题讨论】:
标签: multithreading wcf
这取决于您通过实现服务合同的类上的 ServiceBehavior 属性进行的服务配置:
[ServiceBehavior(
InstanceContextMode = InstanceContextMode.PerSession,
ConcurrencyMode = ConcurrencyMode.Multiple)]
使用参数InstanceContextMode,您可以告诉 WCF 您希望如何托管您的服务:
接下来是同步,当一个宿主对象接收并行操作调用时。您可以使用ConcurrencyMode 参数控制行为:
【讨论】:
默认情况是每次调用都会创建一个新的 wcf 服务实例,这已记录在案,例如here
【讨论】:
没有像新的函数实例这样的东西。这将是类的实例。
您可以通过更改适当的元属性来配置您的服务的行为方式。
您可以在每次调用时实例化您的服务实现。它也可以作为单例(所有调用的唯一服务实例)。
Here you can find information on creating singleton WCF service
【讨论】: