2010-04-13 114 views
0

我有两个服务,一个叫另一个。这两个被标记为单身如下:如何在没有挂起的情况下在WCF单例服务中调用WCF单例服务?

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

我设置这些了一个ServiceHost的如下:

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

当父服务试图调用同一台机器上的子服务,父服务挂起,等待儿童服务。

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

+0

你的意思是WCF服务? – 2010-04-13 19:30:59

+0

对不起,是的。我将编辑该问题 – 2010-04-13 20:52:00

回答

0

问题是我在WPF应用程序中托管并未将UseSynchronizationContext设置为false。这使得WCF服务在UI线程中成为主机,从而在有一个服务(在UI线程上)调用另一个服务(也在UI线程上)时导致死锁。

1

父服务挂起它,因为可能是因为子服务方法花费的时间太长。如果需要很长时间才能以异常方式返回,或者在OpearationContract arrtribute中制定子服务方法IsOneWayo=True

单程服务是火&忘记这种称呼它不会返回任何值。

相关问题