WebServiceHost:阻止Web服务方法中的调用阻止整个服务

时间:2010-08-03 16:25:32

标签: c# wcf

我有一个使用WebServiceHost类的WCF Web服务。

new WebServiceHost(typeof(MyServiceClass));

如果我在我的一个webservice方法中使用了一个阻塞调用,比如Thread.Sleep(只是一个例子),我调用这个方法,当阻塞调用处于活动状态时,整个服务都无法使用。

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

2 个答案:

答案 0 :(得分:2)

您服务的InstanceContextModeConcurrencyMode设置是什么?如果它设置为Single,那么只有一个服务实例,并且所有调用都排队等待,因此如果您将服务线程置于休眠状态,它将阻止所有后续调用。

例如:

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

答案 1 :(得分:0)

好的,我明白了。如果您在Windows窗体GUI线程中启动该服务,则可以添加

UseSynchronizationContext = false

到ServiceBehavior并且请求被并行处理。 :)