3

我有两个通过 WCF 命名管道相互通信的 .NET C# windows 窗体应用程序。其中一个应用程序托管 WCF 服务,另一个是客户端。通信工作正常,客户端可以调用服务方法和回调工作正常等。但是,我遇到的一个问题是,如果主机应用程序关闭,客户端无法检测到管道不再可用。我已经尝试在管道上为所有事件(Closing、Closed、Faulted)注册事件处理程序,但是当主机应用程序关闭时这些永远不会被调用。此外,如果我尝试使用 pipe.State 属性检查客户端中的管道状态,即使管道出现故障,我也会返回 Opened 状态。然后,如果我尝试调用服务方法,它当然会引发异常。

有没有人有这种情况的任何工作示例?

4

2 回答 2

2

在 .NET 3.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 回答