有没有办法配置WCF服务来创建新的线程来处理任何新的传入请求?
答案 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将代表您使用线程池来处理它。