Получение EndpointNotFoundException с NetNamedPipeBinding в C#; Need To Create Global Named Pipe

Я запускаю службу windows, которой отправляю сообщения через NetNamedPipeBinding. Сообщения отправляются из клиентского приложения, которое запускается по GPO. Я только что установил службу и клиента на новый сервер и получаю следующее сообщение:

System.ServiceModel.EndpointNotFoundException: 
There was no endpoint listening at 
net.pipe://localhost/VOXAServices/VOXADefaultPipe that could accept the
message. This is often caused by an incorrect address or SOAP action.
See InnerException, if present, for more details.

Нет никакого внутреннего исключения. Если я запущу клиентское приложение двойным щелчком по его иконке на рабочем столе, то оно запустится без проблем. Я управляю кодом как для службы windows, так и для клиентского приложения, так что я могу изменять все, что мне нужно. Но пока что я вполне уверен, что привязка, договор и адрес все верны (так как все работает нормально при запуске с рабочего стола). Я считаю, что проблема должна заключаться в том, что клиентское приложение запускается из GPO. Но я не могу придумать причину, по которой это могло бы привести к такой ошибке.

UPDATE:

Я прочитал это на сайте Microsoft:

Именной канал - это объект в ядре операционной системы Windows, такой как часть общей памяти, которую процессы могут использовать для общение. Названная труба имеет название и может быть использована для односторонней или дуплексная связь между процессами на одной машине.

Когда требуется обмен данными между различными приложениями WCF на одной машине. один компьютер, и вы хотите предотвратить любую связь с другую машину, затем используйте названную транспортировку труб. Дополнительный ограничение заключается в том, что процессы, запущенные с удаленного рабочего стола Windows, могут быть ограниченным одним и тем же сеансом работы с удаленным рабочим столом Windows, если только они не имеют повышенные привилегии.

(Выбор транспорта, добавлен акцент)

Мне нужно, чтобы клиентский процесс выполнялся в контексте (непривилегированного) пользователя, а наличие всплывающего диалога UAC не является опцией. Мне все равно нужно дать этому клиентскому процессу повышенные привилегии, при этом процесс должен выполняться в контексте пользователя и не делать его привилегированным?

UPDATE #2:

Похоже, что существует такая вещь, как глобальные и локальные (к сеансу windows) каналы с именами. Я считаю, что моя служба windows создает локальную именованную трубу, и что если я смогу заставить ее создать глобальную именованную трубу, это решит мою проблему. (Это объясняет, почему я не смог увидеть свою трубку в сизинтерннальном "Проводнике процессов", хотя мое клиентское приложение могло бы найти ее, если бы я запустил ее из привилегированного сеанса). Проблема в том, что я не знаю (и, кажется, не могу узнать), как заставить именованную трубу быть созданной глобально (c#). Есть идеи?

5
задан Trevor 20 September 2011 в 20:22
поделиться