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

时间:2010-12-23 10:02:53

标签: multithreading wcf

想要清楚了解WCF的工作原理。 让我们说一个WCF服务暴露了一个函数A. 现在客户端创建了5个线程,并且在每个线程中调用具有不同参数的函数A.

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

3 个答案:

答案 0 :(得分:5)

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

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

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

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

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

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

答案 1 :(得分:1)

默认情况下,每次调用都会创建一个新的wcf服务实例,例如, here

答案 2 :(得分:0)

没有像新的功能实例这样的东西。它更像是一个阶级的例子。

您可以通过更改正确的元属性来配置服务的行为方式。

您可以在每次调用时实例化您的服务实现。它也可以作为单例(所有调用的唯一服务实例)。

Here you can find information on creating singleton WCF service

And here there is a lot more about WCF services