WCF如何处理实例化和并发性?

时间:2015-04-10 13:53:14

标签: c# multithreading wcf concurrency

我试着理解WCF如何处理实例化,并发和线程化。

例如,如果我将实例上下文模式配置为PerCall并将并发模式配置为singe,则每个请求都会创建一个WCF服务的新实例。这与创建服务器端的线程有什么关系?

我认为实例化和并发性与线程无关。是否正确,对于给定的示例,每个请求都由“主”I / O ThreadPool排队以由工作线程执行?或者是每个请求创建一个执行此请求的新实例和线程?

1 个答案:

答案 0 :(得分:3)

  

如果我将实例上下文模式配置为PerCall和并发   mode to singe,每个请求都会创建一个新的WCF实例   服务。这与创建的线程有什么关系?   服务器端?

如果您使用Per-Call实例化,则服务实例都是单线程的,因为每个传入请求都由新服务实例提供服务。因此,指定并发性与此方案无关。

  

我认为实例化和并发性并不强烈   穿线

我不确定你是如何得出这个结论的。


在这篇文章下面发表评论:

  

在Per-Call模式下,对于每个调用,我们创建一个实例   服务。如果我们处于单线程模式,则有一个线程   处理这些实例,以便我们按顺序提供请求

这两个陈述是矛盾的。如果我们为每个请求创建一个新实例,那么该服务不会按顺序处理多个请求。它将为每个请求创建一个新实例。

  

(在PerCall模式下)如果并发模式是多个,则执行许多线程   实例方法,所以我们以并行方式提供请求

这不正确。多个请求将由它们自己的服务实例处理。

处理服务实例中的调用需要一个线程。调用处理代码可能是多线程的,但这是服务的内部代码,WCF并发模式不会影响调用处理代码的执行。

对服务的其他调用将导致创建新服务实例。因此,当您确实可以将并发模式设置为多个时,您将永远不会获得多个处理对服务实例的请求的线程。

因此,在每次调用实例化中将并发模式设置为多个不会对服务的行为产生任何实际差异。