3

WCF 名前付きパイプを介して相互に通信している 2 つの .NET C# Windows フォーム アプリケーションがあります。アプリケーションの 1 つは WCF サービスをホストしており、もう 1 つはクライアントです。通信は正常に機能し、クライアントはサービス メソッドを呼び出すことができ、コールバックも正常に機能します。ただし、ホスト アプリケーションがシャットダウンした場合、クライアントはパイプが使用できなくなったことを検出できないという問題があります。すべてのイベント (Closing、Closed、Faulted) のパイプにイベント ハンドラーを登録しようとしましたが、ホスト アプリケーションのシャットダウン時にこれらが呼び出されることはありません。また、pipe.State プロパティを使用してクライアントのパイプの状態を確認しようとすると、パイプが Faulted であっても Opened の状態が返されます。もちろん、サービスメソッドを呼び出そうとすると例外がスローされます。

このシナリオの実例はありますか?

4

2 に答える 2

2

.NET3.5の名前付きパイプでWCFを使用するとうまくいきます。これが例です

    public ClientUpdaterTray()
    {
        InitializeComponent();
        InstanceContext context = new InstanceContext(new ClientUpdaterServiceCallback());
        client = new ClientUpdaterTrayServiceClient(context);

        client.InnerChannel.Faulted += new EventHandler(InnerChannel_Faulted);
        client.InnerDuplexChannel.Faulted += new EventHandler(InnerDuplexChannel_Faulted);
    }

    void InnerDuplexChannel_Faulted(object sender, EventArgs e)
    {
        // Connection faulted
    }

    void InnerChannel_Faulted(object sender, EventArgs e)
    {
        // Connection faulted
    }
于 2009-12-07T15:55:59.713 に答える
0

クライアントが実際にサーバーに電話をかけなくても、サーバーがダウンしていることをクライアントに伝えることができるとは思いません。

  • サーバーがダウンしている場合、サーバーは何もしません
  • パイプが閉じている場合、通信するものは何もありません

私が考えることができる最善の解決策は、try catch内で呼び出しを行い、エラーが発生したときにそれを処理することです。

于 2009-10-03T11:35:34.040 に答える