我创建开始若干从属进程的一个窗口服务。在每个这些从属进程的我开始监听来自主处理消息命名管道。

目前,我有其中主进程调用通过命名管道从奴隶完全启动之前,并开始侦听的命名管道的情况。

    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恢复到重试我的远程调用?

有帮助吗?

解决方案

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

在一般情况下,我以前调用服务,我总是检查状态属性,并且如果它没有被打开我尝试如我如上所述重新初始化它。如果失败,则说明服务器出现问题。 (在我的情况下,状态被由于不活动故障的,所以初始化ussually succedes)

其他提示

您可以连接到主机上的“ServiceFaulted”事件,并用它来进行错误处理。根据该文件,正确的操作是中止主机。然后,您可以尝试重新初始化和,但如果在系统关闭它可能是徒劳无益的。

也许你可以实现一个“会话”基于服务。因此,客户端打开的WCF通道和进行调用以打开会话(例如,一个“开放”的呼叫)。这将让你的主机知道从正在监听。

您可能需要调查WCF的回调机制,以便于从远程通信是通过回调从“打开”调用由它制成一旦初始化设置。

亚历克斯Drenea是说,你要创建一个新的实例正确。我建议有一个看的ChannelFactory类WCF创建的代理。您可以使用此与一些尝试捕捉类型的行为来处理你的奴隶的初始启动。您可能还需要放置System.Diagnostics.Debugger.Break()在你的奴隶进程启动代码调试器可能无法连接,这样你就不会看到你的奴隶过程中的异常。

我能问你是否真的需要进程隔离或将采用同步和线程足以满足您的任务是什么?

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top