Я использую службу Windows, которой я отправляю сообщения через NetNamedPipeBinding.Сообщения отправляются из клиентского приложения, которое запускается объектом групповой политики.Я только что установил службу и клиент на новом сервере и получаю следующее сообщение:
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, так и для клиентского приложения, поэтому я могу изменить все, что мне нужно.Но до сих пор я почти уверен, что привязка, контракт и адрес верны (так как все работает при запуске с рабочего стола).Я считаю, что проблема заключается в том, что клиентское приложение запускается из объекта групповой политики.Но я не могу придумать причину, по которой это может привести к этой ошибке.
ОБНОВЛЕНИЕ:
Я прочитал это на веб-сайте Microsoft:
Именованный канал - это объект в ядре операционной системы Windows, например раздел общей памяти, который процессы могут использовать для связи.Именованный канал имеет имя и может использоваться для односторонней или дуплексной связи между процессами на одном компьютере.
Когда требуется обмен данными между различными приложениями WCF на одном компьютере, и вы хотите предотвратить любыесвязь с другой машины, затем используйте именованные каналы транспорта. Дополнительным ограничением является то, что процессы, запущенные из удаленного рабочего стола Windows, могут быть ограничены одним и тем же сеансом удаленного рабочего стола Windows, если у них нет повышенных привилегий.
( Выбор транспорта , выделение добавлено)
Мне нужно, чтобы клиентский процесс запускался в контексте (непривилегированного) пользователя, и всплывающее диалоговое окно UAC недоступно.Могу ли я в любом случае дать этому клиентскому процессу повышенные привилегии, сохраняя при этом процесс, работающий в пользовательском контексте и не делающий пользователя привилегированным?
ОБНОВЛЕНИЕ № 2:
Похоже, что существует такая вещь, как глобальная и локальная (для сеанса Windows) именованные каналы.Я считаю, что мой Windows-сервис создает локальный именованный канал, и если я смогу заставить его создать глобальный именованный канал, это решит мою проблему.(Это объясняет, почему я не мог видеть свой канал в sysinternals «Process Explorer», даже если мое клиентское приложение могло найти его, если я запустил его из привилегированного сеанса).Проблема в том, что я не знаю (и, похоже, не могу выяснить), как заставить глобально создать именованный канал (c #).Есть идеи?