0

我有两个服务,一个调用另一个。两者都标记为单例,如下所示:

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

我使用 ServiceHost 进行了如下设置:

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

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

我已经在考虑放弃单例模型,但是我的方法有什么问题吗?是否有对这种行为的解释和解决方法?

4

2 回答 2

1

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

一种服务方式是Fire & Forget类型的调用,它不返回任何值。

于 2010-04-14T05:53:19.987 回答
0

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

于 2010-04-14T19:32:22.280 回答