Подключение через именованный канал от службы Windows (сеанс № 0) к настольному приложению (сеанс № 1)

Учитывая :
- приложение - приложение .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.

7
задан Shrike 29 November 2010 в 11:52
поделиться