【发布时间】:2009-02-26 21:09:48
【问题描述】:
所以我在 WinForms 应用程序中托管 WCF 服务。我有以下
[ServiceBehavior(ConcurrencyMode = ConcurrencyMode.Multiple,
InstanceContextMode = InstanceContextMode.PerCall)]
public class Test : ITest
{
public string TestIt(string input)
{
Thread.Sleep(5000);
return "test";
}
}
我正在使用命名管道,并且有另一个应用程序的两个实例充当上述 WCF 服务的客户端(在 WinForms 应用程序中运行)。我认为基于 Multiple 的 ConcurrencyMode 设置,当 Client1 调用测试服务时,Client2 不必等到第一次调用完成。但是,当 Client1 调用 TestIt 时,Client2 会阻塞,直到来自 Client1 的调用完成!?!?!不应该每次都根据上面的设置新建一个实例吗?
另外,让承载 WCF 服务的 WinForms 应用程序保持响应的最佳方法是在单独的线程上运行 WCF 服务吗?
注意:在 Test 类上设置 [CallbackBehavior(UseSynchronizationContext = false)] 并不能缓解问题。服务仍然一次只响应一个请求。
【问题讨论】:
标签: wcf concurrency