WCF服务,为每个新请求创建一个新线程

有没有办法配置WCF服务来创建一个新的线程来处理任何新的传入请求?

是的,你可以这样做 – 它被称为“按次呼叫”处理请求。 ServiceHost将为每个处理该请求的请求创建服务类的新实例。

为此,您需要将Service类(实现服务接口的类)设置为“PerCall” – 通过在服务类上应用属性来执行此操作:

[ServiceBehavior(InstanceContextMode=InstanceContextMode.PerCall)] public class YourService : IYourService { ... } 

取决于您想要什么,但以下服务行为将解决它:

 ServiceBehavior: ConcurrencyMode=ConcurrencyMode.Multiple InstanceContextMode=InstanceContextMode.Single 

您的类将是一个单例,但对方法的所有调用都将在一个单独的线程中运行。 如果您需要任何同步,您必须手动执行。

另外,不要忘记考虑节流以了解潜在的性能问题。

不,因为你永远不想这样做。 你真正想要实现的目标是什么?

编辑

根据更多信息,这是我的想法。

如果您只是希望每个请求都有“粘滞状态”,那么您应该使用Instance上的状态并使用InstanceContextMode.PerCall,这符合marc_s的响应。

如果你需要某个状态在你的调用的线程本地存储中,你可以考虑使用ICallContextInitializer作为一种方法来将状态编组到WCF选择调用你的方法的线程上(并在调用完成时清除线程状态) )。

但你不应该关心“哪个线程”。 WCF将代表您使用线程池处理它。