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