我有两个服务,一个叫另一个服务。两者都被标记为单身如下:
[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single,
ConcurrencyMode = ConcurrencyMode.Multiple)]
public class Service : IService
我用ServiceHost设置如下:
ServiceHost serviceHost = new ServiceHost(singletonElement);
serviceHost.Open();
当父服务尝试在同一台计算机上调用子服务时,父服务将挂起,等待子服务。
我已经在考虑摆脱单身人士模式,但我的方法有什么问题吗?是否有解释这种行为的方法和解决方法?
答案 0 :(得分:1)
父服务挂起它,因为可能becoz子服务方法花费的时间太长。如果需要很长时间才能返回异步调用它,或者在OpearationContract arrtribute中生成子服务方法IsOneWayo=True
。
单程服务 Fire&忘记类型的调用它不会返回任何值。
答案 1 :(得分:0)
问题是我在WPF应用程序中托管并且没有将UseSynchronizationContext设置为false。这使得WCF服务主机位于UI线程中,因此当您有一个服务(在UI线程上)调用另一个服务(也在UI线程上)时会导致死锁。