我正在创建一个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();

如果执行此操作,则通道进入CommunicationState.Faulted,并且该通道上的任何后续调用也会失败。

我该怎么做才能从主服务器验证从属进程开始侦听?或者如何从CommunicationState.Faulted中恢复以重试我的远程 call ?

最佳答案

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

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

10-04 18:20