我有一个使用WebServiceHost类的WCF Web服务。
new WebServiceHost(typeof(MyServiceClass));
如果我在我的一个webservice方法中使用了一个阻塞调用,比如Thread.Sleep(只是一个例子),我调用这个方法,当阻塞调用处于活动状态时,整个服务都无法使用。
这是正常行为还是我的配置或使用中出现错误?
答案 0 :(得分:2)
您服务的InstanceContextMode和ConcurrencyMode设置是什么?如果它设置为Single,那么只有一个服务实例,并且所有调用都排队等待,因此如果您将服务线程置于休眠状态,它将阻止所有后续调用。
例如:
[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single,
ConcurrencyMode = ConcurrencyMode.Single)]
public class MyService : IMyService
{
}
答案 1 :(得分:0)
好的,我明白了。如果您在Windows窗体GUI线程中启动该服务,则可以添加
UseSynchronizationContext = false
到ServiceBehavior并且请求被并行处理。 :)