WebServiceHost:在webservice方法中阻塞呼叫会阻塞整个服务

问题描述:

我有一个使用WebServiceHost类的WCF webservice。WebServiceHost:在webservice方法中阻塞呼叫会阻塞整个服务

新的WebServiceHost(typeof(MyServiceClass));

如果我在其中一个webservice方法中使用像Thread.Sleep这样的阻塞调用(只是一个示例),并且我调用此方法,则在阻塞调用处于活动状态时整个服务不可用。

这是正常行为还是在我的配置或使用中出现错误?

+0

你绝对应该*不*要在您的Web服务中调用Thread.Sleep。但burningmonk的答案很好。 – 2010-08-03 17:52:00

好吧,我知道了。如果您在Windows窗体GUI线程中启动该服务,则可以向ServiceBehavior添加

UseSynchronizationContext = false 

并且并行处理请求。 :)

什么是您的服务的InstanceContextModeConcurrencyMode设置?如果它被设置为Single,那么只有一个服务实例,并且所有的调用都是排队的,所以如果你让服务线程休眠,它将阻塞所有后续调用。

例如:

[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single, 
       ConcurrencyMode = ConcurrencyMode.Single)] 
public class MyService : IMyService 
{ 
}