1

私たちのアプリケーションは、2 つのアプリケーション ドメインで構成されています。セカンダリ アプリケーション ドメインでの一部のメソッド呼び出し (ロギング) は、最初のアプリケーション ドメインに「リダイレクト」する必要があります。

これは、メイン アプリケーション ドメインで WCF サービスをセットアップし、セカンダリ アプリケーション ドメインでその操作を呼び出すことによって行われます。

たとえば、2 番目の AppDomain で実行されるコードは次のとおりです。

Logger.Debug("Message");

最初の AppDomain への WCF サービス呼び出しとして内部的にリダイレクトされます。

public void Debug(string message)
{
    if (useService)
    {
        logProxy.Log(message);
    }
}

問題は、ランダムな機会に、サービス プロキシがFaulted状態に移行するのを見ていることです。

さらに詳しく調べてみると、サービス呼び出しを行うスレッドがシャットダウンされると、場合によってはプロキシ オブジェクトに障害が発生することがわかりました。

私の質問は、WCF サービス呼び出しが実行されたが、呼び出しを開始したスレッドがシャットダウンされるというシナリオから身を守るにはどうすればよいですか? (おそらく返信を受け取る前に)。

また -- ClientBase は、クライアント プロキシの作成に ChannelFactory オプションを使用するよりも有利ですか?

私のセットアップに関するいくつかの追加の詳細:

  • WCF サービスは、NetNamedPipeBinding (名前付きパイプ) を介して公開されます
  • 「クライアント」プロキシ (ClientBase ではない) を作成するために ChannelFactory.CreateChannel メソッドを使用しています。
4

1 に答える 1

1

これを処理できるのはクライアントだけです。

ServiceClient client = new ServiceClient();
 try {
     client.Operation();
 }
 catch(Exception ex)
 {
     if (client.State == CommunicationState.Faulted)
     {
             client.Abort();
             client = new ServiceClient();
     }
 }
于 2012-05-22T19:41:23.933 に答える