Наше приложение использует WCF по именованным каналам для связи между двумя процессами (обратите внимание: ни один из них не является службой Windows). Наше приложение работает без инцидентов уже пару лет.
Теперь мы получаем сообщения о том, что присутствие стороннего приложения (в частности, Garmin Express) ломается. Я установил Garmin Express в дом и подтвердил поведение. В частности, "Служба обновления ядра Garmin" при запуске приводит к сбою нашего приложения.
Когда служба Garmin запущена, начинается "сервисная" часть нашего приложения и не возникает проблем с созданием конечной точки WCF. Но когда клиент запускается и пытается подключиться к службе, он терпит неудачу с EndpointNotFoundException, как будто служба даже не работает.
На этом этапе я могу буквально остановить службу Garmin с панели управления Services, а затем повторно запустить клиента, даже не перезапустив нашу собственную услугу. Если я снова запустил сервис Garmin, дальнейшие попытки запустить клиент потерпят неудачу. Таким образом, это, по крайней мере, доказывает, что наша служба WCF работает и работает все время, а программное обеспечение Garmin каким-то образом блокирует способность наших клиентов подключаться к нему.
Мы используем собственное имя для адреса конечной точки (например, "net.pipe://localhost/MyPrivateApplication" ). Я попытался изменить этот адрес на другие имена, но это не влияет на проблему.
Как другое приложение, просто запустив, нарушит нашу собственную способность приложения использовать WCF?
Обновление: по запросу здесь приведен фрагмент кода со стороны службы. Я упростил его из нашего исходного кода, пытаясь изолировать проблему. Пока что ни одно изменение, которое я сделал, не повлияло на проблему.
MyService service = new MyService();
ServiceHost host = new ServiceHost(service);
string hostAddress = new Uri("net.pipe://localhost/MyWCFConnection");
host.AddServiceEndpoint(typeof(IMyService), new NetNamedPipeBinding(), hostAddress);
host.Open();