.net - 在使用来自客户端的 channel 之前,如何检查 WCF 主机是否可用?

标签 .net wcf interprocess channel

我正在创建一个启动多个从属进程的 Windows 服务。在每个从属进程中,我开始在命名管道上监听来自主进程的消息。

我目前的情况是,在从属完全启动并开始在命名管道上监听之前,主进程通过命名管道调用从属。

    ProcessStartInfo processStartInfo = new ProcessStartInfo("slave");
    processStartInfo.Arguments = Address 

    Process process = new Process();
    process.StartInfo = processStartInfo;

    process.Start();

    base.Endpoint.Binding = new NetNamedPipeBinding(NetNamedPipeSecurityMode.None);
    base.Endpoint.Address = Address;

    base.Channel.RemoteMethod();

如果我这样做, channel 将进入 CommunicationState.Faulted并且 channel 上的任何后续调用也会失败。

我该怎么做才能从主进程验证从进程开始监听?或者我怎样才能从 CommunicationState.Faulted 中恢复?重试我的远程调用?

最佳答案

从故障状态中恢复的唯一方法是通过重新构建实例并调用 Open() 方法来重新初始化 WCF 客户端。

一般来说,在调用服务之前,我总是检查状态属性,如果它没有打开,我会尝试重新初始化它,如上所述。如果失败,则服务器有问题。 (在我的情况下,状态由于不活动而出错,因此初始化通常会成功)

关于.net - 在使用来自客户端的 channel 之前,如何检查 WCF 主机是否可用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1078037/

相关文章:

c# - 动态执行基于 SOAP 的 Web 服务而不生成代理

c# - 使用 WCF(或其他解决方案)保护双工通信的最佳方法

wcf - 以编程方式添加端点

c++ - 在 C++ 中从另一个进程解锁线程

c# - ReaderWriterLock 与锁{}

c# - .NET 中的 PDF 二进制数据输出

c# - 如何在 WinForm 和 C# (Visual Studio 2015) 中使用 .Net Native?

javascript - 在node.js中,如何声明一个可以被master进程初始化并被worker进程访问的共享变量?

c++ - 使用 managed_shared_object 创建的 std::vector 是否需要同步?

c# - 如何拦截 Windows 中物理电源按钮的按下?