Дано :
- приложение - настольный графический интерфейс (WPF) .NET app
- служба Windows, наблюдающая за приложением (также .NET)
Служба Windows периодическиПриложение "pings", чтобы убедиться, что оно исправно (и если это не так, winservice перезапустит его).
Я собирался реализовать "ping" через именованные каналы.Чтобы сделать вещи проще, я решил сделать это с WCF.Приложение содержит WCF-сервис (одна операция Ping возвращает что-то).Служба Windows является клиентом для этой службы WCF, периодически ее запускающей на основе таймера.
Это все в Windows 7.
Служба Windows работает под LocalService (в сеансе # 0).
Настольное приложение работает под текущим вошедшим пользователем (в сеансе # 1).
Проблема :
Служба Windows не может увидеть конечную точку WCF (с NetNamedPipeBinding), созданную и прослушиваемую в настольном приложении.Это означает, что при вызове через прокси wcf я получаю следующее исключение: «Конечная точка канала 'net.pipe: // localhost / HeartBeat' не может быть найдена на вашем локальном компьютере»
Я уверен, что код в порядкепотому что другое настольное приложение (в сеансе # 1) может видеть конечную точку.
Очевидно, здесь я имею дело с некоторыми мерами безопасности для изоляции системных объектов Win32.Но я полагаю, что должен быть способ обойти ограничения, с которыми я столкнулся.
Я могу пожертвовать подходом WCF и пойти необработанным путем NamedPipe.