Я запускаю службу 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#). Есть идеи?