WebServiceHost:在webservice方法中阻塞呼叫会阻塞整个服务
问题描述:
我有一个使用WebServiceHost类的WCF webservice。WebServiceHost:在webservice方法中阻塞呼叫会阻塞整个服务
新的WebServiceHost(typeof(MyServiceClass));
如果我在其中一个webservice方法中使用像Thread.Sleep这样的阻塞调用(只是一个示例),并且我调用此方法,则在阻塞调用处于活动状态时整个服务不可用。
这是正常行为还是在我的配置或使用中出现错误?
答
好吧,我知道了。如果您在Windows窗体GUI线程中启动该服务,则可以向ServiceBehavior添加
UseSynchronizationContext = false
并且并行处理请求。 :)
答
什么是您的服务的InstanceContextMode和ConcurrencyMode设置?如果它被设置为Single,那么只有一个服务实例,并且所有的调用都是排队的,所以如果你让服务线程休眠,它将阻塞所有后续调用。
例如:
[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single,
ConcurrencyMode = ConcurrencyMode.Single)]
public class MyService : IMyService
{
}
你绝对应该*不*要在您的Web服务中调用Thread.Sleep。但burningmonk的答案很好。 – 2010-08-03 17:52:00