Estoy ejecutando un servicio de Windows al que envío mensajes a través de NetNamedPipeBinding. Los mensajes se envían desde una aplicación cliente que se desencadena por un GPO. Acabo de instalar el servicio y el cliente en un nuevo servidor y recibo el siguiente mensaje:Obteniendo EndpointNotFoundException con NetNamedPipeBinding en C#; Necesidad de crear un canal con nombre global
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.
No hay una excepción interna. Si ejecuto la aplicación cliente haciendo doble clic en su icono en el escritorio, se ejecuta sin problemas. Administro el código tanto para el servicio de Windows como para la aplicación cliente, para poder cambiar lo que necesito. Pero hasta ahora, estoy bastante convencido de que el enlace, el contrato y la dirección son todos correctos (ya que todo funciona bien cuando se ejecuta desde el escritorio). Creo que el problema debe ser con la aplicación del cliente que se ejecuta desde un GPO. Pero no puedo pensar en ninguna razón por la que eso causaría este error.
ACTUALIZACIÓN:
leí este presente en el sitio web de Microsoft:
una tubería con nombre es un objeto en el núcleo del sistema operativo Windows, tales como una sección de memoria compartida que los procesos puedan usar para la comunicación . Una tubería con nombre tiene un nombre y se puede usar para la comunicación dúplex unidireccional o entre procesos en una sola máquina.
Cuando se requiere comunicación entre diferentes aplicaciones WCF en un solo equipo , y desea evitar cualquier comunicación desde en otra máquina, utilice el transporte de tuberías con nombre. Una restricción adicional de es que los procesos que se ejecutan desde Windows Remote Desktop pueden restringirse a la misma sesión de Windows Remote Desktop a menos que tengan privilegios elevados.
(Choosing a Transport, énfasis añadido)
necesito el proceso de cliente para ejecutar en el contexto del usuario (no privilegiado) y tener un diálogo UAC pop arriba no es una opción. ¿Hay alguna forma de que le dé a este cliente privilegios elevados mientras mantiene el proceso ejecutándose en el contexto del usuario sin privilegiarlo?
ACTUALIZACIÓN # 2:
Parece que hay una cosa tal como global y local (a la sesión de Windows) canalizaciones con nombre. Creo que mi servicio de Windows está creando una tubería con nombre local y que si puedo obligarlo a crear una tubería con nombre global, resolvería mi problema. (Esto explica por qué no pude ver mi pipa en sysinternals "Process Explorer", aunque mi aplicación cliente podría encontrarla si la lancé desde una sesión privilegiada). El problema es que no sé (y no puedo encontrarlo) cómo forzar una tubería con nombre para que se cree globalmente (C#). ¿Algunas ideas?