我的 WPF 应用程序中有几个 WCF 服务,我使用这种方法打开它们:
private void StartSpecificWCFService(IService service, string url, Type serviceInterfaceType)
{
ServiceHost serviceHost = new ServiceHost(service, address);
serviceHost.AddServiceEndpoint(serviceInterfaceType, new NetNamedPipeBinding(), url);
serviceHost.Open();
//sign to serviceHost.Faulted ??
_wcfServicesHolder.Add(serviceHost); //A dictionary containing all my services
}
服务属性是:
[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single, ConcurrencyMode = ConcurrencyMode.Multiple)]
这些服务是日志服务和事件服务,它们从其他进程收到许多调用。我使用命名管道,因为它是最快的并且进程在同一台计算机上运行。
我的问题是 - 我如何保持这些服务一直处于运行状态?
- 轮询计时器,迭代 _wcfServicesHolder 并检查服务是否已打开
- 登录 serviceHost.Faulted 事件。
并且在服务处于故障状态后,是否必须重新创建客户端(在不同的进程上)?或者它仍然可以在同一频道上广播消息?
我收到的例外是:
There was no endpoint listening at net.pipe://localhost/LoggingService that could accept the message. This is often caused by an incorrect address or SOAP action. See InnerException, if present, for more details