0

2 つのサービスがあり、1 つは別のサービスを呼び出します。どちらも次のようにシングルトンとしてマークされています。

[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、OperationContract Arrtribute で子サービス メソッドを作成します。

片道サービスはFire & Forgetのような呼び出しで、値を返しません。

于 2010-04-14T05:53:19.987 に答える
0

問題は、WPF アプリケーション内でホストしていて、UseSynchronizationContext を false に設定していなかったことです。これにより、WCF サービスが UI スレッドでホストされるため、あるサービス (UI スレッド上) が別のサービス (同じく UI スレッド上) を呼び出すと、デッドロックが発生します。

于 2010-04-14T19:32:22.280 に答える