如何在WCF单例服务中调用WCF单例服务而不挂起?

时间:2010-04-13 19:28:22

标签: c# wcf single-instance

我有两个服务,一个叫另一个服务。两者都被标记为单身如下:

[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single,
    ConcurrencyMode = ConcurrencyMode.Multiple)]
public class Service : IService

我用ServiceHost设置如下:

ServiceHost serviceHost = new ServiceHost(singletonElement);
serviceHost.Open();

当父服务尝试在同一台计算机上调用子服务时,父服务将挂起,等待子服务。

我已经在考虑摆脱单身人士模式,但我的方法有什么问题吗?是否有解释这种行为的方法和解决方法?

2 个答案:

答案 0 :(得分:1)

父服务挂起它,因为可能becoz子服务方法花费的时间太长。如果需要很长时间才能返回异步调用它,或者在OpearationContract arrtribute中生成子服务方法IsOneWayo=True

单程服务 Fire&忘记类型的调用它不会返回任何值。

答案 1 :(得分:0)

问题是我在WPF应用程序中托管并且没有将UseSynchronizationContext设置为false。这使得WCF服务主机位于UI线程中,因此当您有一个服务(在UI线程上)调用另一个服务(也在UI线程上)时会导致死锁。