Domanda

Qualcuno conosce un buon modo per effettuare chiamate di procedure remote in ambiente Windows (non .net)?

Non riesco a trovare molte informazioni su come farlo e msdn ha solo la versione .net.

.

Modifica:

Grazie per le risposte finora. Ciò di cui ho bisogno è di comunicare con un servizio sullo stesso computer che invierà rapporti di avanzamento al "client". Il motivo per cui sono interessato a rpc è a causa delle viste e di come i servizi non possono parlare con le normali app a meno che non utilizzino rpc o pipe. Esaminando le pipe, sembrano essere interamente testuali e ho avuto l'impressione che rpc possa trasmettere valori fortemente tipizzati.

Esaminerò anche DCOM.

È stato utile?

Soluzione

Se sei interessato solo a parlare tra processi sulla stessa macchina, boost :: interprocess è un ottimo modo per far dialogare un canale.

Altre soluzioni specifiche per Windows sono file mappato memoria condivisa e mutex / segnali globali di sistema o named pipe .

boost :: serialize e google buffer di protocollo sono modi per convertire i dati inviati tra il processi a stringhe binarie che dipendono meno dall'imballaggio della struttura e da altre cose che possono differire tra diversi eseguibili.

boost :: interprocess, boost :: serialize e buffer di protocollo dovrebbero essere indipendenti dalla piattaforma, quindi tecnicamente potrebbero funzionare anche su Linux / Mac!

Altri suggerimenti

DCOM ha un meccanismo di chiamata di procedura remota basato su DCE RPC. Se si crea il sistema come componente COM o si inserisce un wrapper COM sull'API che si desidera esporre, è possibile utilizzarlo. Oltre a ciò, potresti voler espandere la tua domanda con un po 'più di approfondimento sulle specifiche del problema. Non ho davvero la minima idea se il problema abbia aspetti che potrebbero impedire l'uso di DCOM.

Un approccio alternativo sarebbe quello di posizionare un wrapper di servizi Web attorno all'applicazione. I servizi Web (sicuramente quelli basati su SOAP o XML-RPC) sono in realtà solo un meccanismo RPC che utilizza HTTP come protocollo di trasporto.

Puoi chiamare il codice da remoto su Windows in centinaia di modi diversi; socket, DCom ecc ... Microsoft in una fase supportava rpcgen (basato su DCE RPC) che ti consentiva di definire chiamate API remote e il suo compilatore avrebbe scritto il codice colla. Questo era il livello sottostante in DCOM.

Non è compatibile con UNIX ONC-RPC che è più facile da usare e uno standard più ampio. Potresti voler guardare uno di i toolkit ONC_RPC se qualcosa come DCOM non fa per te.

Tony

Sì, sono d'accordo con Isalamon: basta usare il vero RPC già integrato con MIDL. È possibile ottenere un libro di O'Reilly su DCE RPC. Se ti trovi sullo stesso computer, usa semplicemente un host di ncalrpc.

Qui è qualcosa che abbiamo stato utilizzato nel 1996 presso Cheyenne Software su Win NT per l'antivirus InocuLAN. Questo è puro RPC, nessuno strato OO. Spero che sia ancora disponibile in Windows più recente.

Bene, ordinate per complessità, sovraccarico e velocità inversa, mi vengono in mente queste possibilità:

  • SAPONE (che hai già escluso)
  • Corba
  • DCOM (DCE)
  • scambio di messaggi XML
  • ONC-RPC (SunRPC)
  • scambio di messaggi simili a HTTP
  • scambio di messaggi simili a telnet (linea orientata)

Per tutti, diventerai più o meno pronto all'uso (pronto per essere frustrato) librerie, pacchetti ecc. come open source.

Alcune delle precedenti potrebbero sembrare strane, ma in realtà usiamo spesso HTTP o Telnet per RPC. Il motivo è che non hai bisogno di ambienti sofisticati per testare, qualsiasi software alieno può adattarsi facilmente ad esso. Questi rendono anche i servizi del tuo programma facilmente utilizzabili da un browser Web, da una sessione telnet o da un altro programma che semplicemente apre un socket e invia la richiesta. Ad esempio, la maggior parte dei miei programmi include un argomento della riga di comando --scripting, che apre una porta telnet tramite la quale è possibile inviare l'accesso all'intero modello a oggetti delle applicazioni tramite un linguaggio simile a JavaScript. Questo può anche essere usato per controllare qualsiasi app in remoto molto facilmente, senza alcuno sforzo. Se hai scritto un tale framework una volta, può essere riutilizzato per ogni nuova app (vedi come appare qui )

Devo ammettere che tutte le mie app sono scritte in un ambiente, in cui tutto quanto sopra è già incluso e pronto per l'uso, sia come client che come server.

Riepilogo: usa la cosa più semplice, che fa il lavoro. Non hai bisogno di Corba o SOAP a meno che la tua app non debba essere integrata in tale infrastruttura.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top