Pregunta

¿Alguien sabe una buena manera de hacer llamadas a procedimientos remotos en Windows (no .net) ambiental?

No puedo encontrar mucha información sobre cómo hacerlo y el msdn solo tiene la versión .net.

.

Editar:

Gracias por las respuestas hasta ahora. Lo que necesito es comunicarme con un servicio en la misma computadora que enviará informes de progreso al "cliente". La razón por la que estoy interesado en rpc es por vistas uac y cómo los servicios no pueden comunicarse con las aplicaciones normales a menos que usen rpc o tuberías. Al examinar las tuberías, parecen estar completamente basadas en texto y tenía la impresión de que rpc puede pasar valores fuertemente tipados.

También examinaré DCOM.

¿Fue útil?

Solución

Si solo está interesado en hablar entre procesos en la misma máquina, boost :: interprocess es una forma genial de conseguir un canal para que hablen.

Más soluciones específicas de Windows es un archivo mapeado de memoria compartida y señales / mutexes globales del sistema o tuberías con nombre .

boost :: serialize y google búferes de protocolo son formas de convertir los datos que envía entre procesa cadenas binarias que dependen menos del empaque de estructura y otras cosas que pueden diferir entre diferentes ejecutables.

boost :: interprocess, boost :: serialize y los buffers de protocolo deben ser independientes de la plataforma, por lo que técnicamente también podría funcionar en Linux / Mac.

Otros consejos

DCOM tiene un mecanismo de llamada a procedimiento remoto basado en DCE RPC. Si crea su sistema como un componente COM o coloca un contenedor COM sobre la API que desea exponer, puede usar esto. Más allá de eso, es posible que desee ampliar su pregunta con más información sobre los detalles del problema. Realmente no tengo idea de si el problema tiene algún aspecto que pueda impedir el uso de DCOM.

Un enfoque alternativo sería colocar un contenedor de servicios web alrededor de la aplicación. Los servicios web (ciertamente aquellos basados ??en SOAP o XML-RPC) son realmente solo un mecanismo RPC que utiliza HTTP como protocolo de transporte.

Puede llamar el código de forma remota en Windows de cien maneras diferentes; sockets, DCom, etc ... Microsoft en una etapa admitió rpcgen (basado en DCE RPC) que le permitió definir llamadas remotas API y su compilador escribiría el código de pegamento. Esta era la capa subyacente en DCOM.

No es compatible con UNIX ONC-RPC, que es más fácil de usar y tiene un estándar más amplio. Es posible que desee ver uno de los kits de herramientas ONC_RPC si algo como DCOM no es para ti.

Tony

Sí, estoy de acuerdo con Isalamon, solo use el RPC real que ya está integrado con MIDL. Puede obtener un libro de O'Reilly sobre DCE RPC. Si está en la misma máquina, simplemente use un host de enlace de ncalrpc.

Aquí es algo que hemos estado usando en 1996 en Cheyenne Software en Win NT para el antivirus InocuLAN. Esto es puro RPC, ninguno de la capa OO. Espero que todavía esté disponible en Windows más nuevos.

Bueno, ordenados por complejidad, sobrecarga y velocidad inversa, me vienen a la mente estas posibilidades:

  • SOAP (que ya excluyó)
  • Corba
  • DCOM (DCE)
  • intercambio de mensajes XML
  • ONC-RPC (SunRPC)
  • intercambio de mensajes tipo HTTP
  • intercambio de mensajes tipo telnet (orientado a línea)

Para todos, estará más o menos listo para usar (listo para ser frustrado) bibliotecas, paquetes, etc. como código abierto.

Algunos de los anteriores pueden sonar extraños, pero en realidad, a menudo usamos HTTP o Telnet para RPC. La razón es que no necesita entornos sofisticados para probar, la mayoría de los software extraterrestres pueden adaptarse fácilmente a él. Esto también hace que los servicios de su programa sean fácilmente utilizables desde un WebBrowser, una sesión de telnet u otro programa que simplemente le abra un socket y envíe la solicitud. Por ejemplo, la mayoría de mis programas incluyen un argumento de línea de comandos de script, que abre un puerto telnet a través del cual puede enviar acceso a todo el modelo de objetos de las aplicaciones a través de un lenguaje similar a JavaScript. Esto también se puede usar para controlar remotamente cualquier aplicación de manera muy sencilla, sin ningún esfuerzo. Si ha escrito dicho marco una vez, puede reutilizarse para cada aplicación nueva (vea cómo se ve aquí )

Tengo que admitir que todas mis aplicaciones están escritas en un entorno, donde todo lo anterior ya está incluido y listo para usar, tanto como clientes como servidores.

Resumen: use la cosa más simple, que hace el trabajo. No necesita Corba o SOAP a menos que su aplicación deba integrarse en dicha infraestructura.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top