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

时间:2009-09-16 05:57:15

标签: c# .net wcf

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

3 个答案:

答案 0 :(得分:7)

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

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

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

马克

答案 1 :(得分:3)

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

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

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

另外,请不要忘记调查以了解潜在的性能问题。

答案 2 :(得分:0)

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

修改

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

如果你只是想要每个请求“粘滞状态”,你应该使用Instance上的状态并使用InstanceContextMode.PerCall,根据marc_s的响应。

如果你需要一些状态来进行调用的线程本地存储,你可以考虑使用ICallContextInitializer作为一种方法来将状态编组到WCF选择调用你的方法的线程上(并清理)调用结束时的线程状态。

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