У меня есть несколько служб WCF в моем приложении WPF, я открываю их с помощью этого метода:
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)]
Службы - это служба регистрации и служба событий, они получают много вызовов от других процессов. Я использую namedpipes, поскольку он самый быстрый, и процессы выполняются на ОДНОМ и том же компьютере.
Мой вопрос: как я могу поддерживать эти службы, чтобы они всегда были в рабочем состоянии?
- Таймер опроса, который повторяет _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