ServiceStack如何处理并发调用?

时间:2013-01-09 15:29:50

标签: c# rest servicestack

ServiceStack如何处理并发呼叫?我在WCF中寻找相当于ConcurrencyMode.Multiple。

我的WCF服务设置了此属性:

   [ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall, ConcurrencyMode = ConcurrencyMode.Multiple, UseSynchronizationContext = false)]

我是否需要在ServiceStack中启用任何内容以使其为每次调用使用多个线程?

1 个答案:

答案 0 :(得分:16)

ServiceStack每个AppHost没有可配置的并发模型,它依赖于您选择托管ServiceStack服务的AppHost:

ASP.NET主机(AppHostBase)

对于ASP.NET Web主机,ServiceStack 本身不会创建任何新线程,请求只需在处理请求的同一IIS / Nginx / etc ASP.NET HTTP WebWorker上处理。

HttpListener自我主机(AppHostHttpListenerBase)

当您致电new AppHost().Start(url)时,ServiceStack仅在启动上创建新主题。在运行时没有创建新线程,即请求在HttpListener异步回调线程上处理。

HttpListener长时间运行自主(AppHostHttpListenerLongRunningBase)

这是ServiceStack的另一个Self-Host HttpListener选项,它使用自己的托管ThreadPool来执行请求(释放HttpListener异步回调线程)。 ThreadPool的默认poolSize是 500 个线程,但这可以在AppHostHttpListenerLongRunningBase(poolSize)构造函数中配置。

RedisMQ主机(RedisMqServer)

管理长时间运行任务的一个好方法是将请求委托给Redis MQ Host,这是一个轻量级MQ服务器,允许您在托管后台线程中推迟和处理请求。默认情况下,RedisMqServer为每个Message类型(即Request)生成一个后台线程,虽然这可以在启动时配置,例如:在下面的示例中, 2个后台线程用于处理{{1请求,而每个只有一个后台线程用于处理PostTwitterCallFacebook个请求:

EmailMessage