我正在创建一个启动多个从属进程的 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/