2010-09-27 6 views

risposta

6

Suppongo che per "applicazione esterna" si intenda qualcosa che si trova al di fuori dello spazio di elaborazione del codice C#. Inoltre, presumo che tu non ti stia riferendo agli eventi C# - che non sono un concetto che esiste al di fuori del dominio di implementazione di .NET - non sono qualcosa che è accessibile dall'esterno del codice.

Quindi la risposta generale a questa domanda è "sì è possibile", ma dal momento che si sta essenzialmente tentando di inviare notifiche tra processi occorrerà utilizzare una specie di IPC mechanism.

.NET ha una ricca API per l'esecuzione di IPC, che va da named pipe, a DCOM, a protocolli di rete di basso livello come TCP/IP. L'approccio che utilizzi dipende dall'ambiente in cui questi processi devono comunicare (su una singola macchina, su macchine su una intranet, su Internet, ecc.). Dipenderà anche dal tipo di informazioni che stai scambiando e da quanto impegno sei disposto a spendere. Per le applicazioni .NET 3.5, in genere è possibile trovare un'implementazione supportata utilizzando WCF as the unifying framework.

Ovviamente, tutto ciò dipende dalla possibilità di modificare l'implementazione (leggi il codice sorgente) dell'applicazione .NET a cui si sta tentando di generare un evento. Se non puoi farlo, e non c'è un meccanismo IPC esistente in quel codice, probabilmente sei bloccato.

UPDATE: In risposta al tuo commento:

Che cosa consiglierebbe con la priorità di agio e tempo. Entrambe le applicazioni sono in esecuzione sulla stessa macchina, e io scrivo di loro sia io

vorrei considerare l'utilizzo di Named Pipes. I pipe nominati sono in origine un concetto Unix, ma sono disponibili anche su Windows. Hanno una semplice interfaccia di programmazione (sono simili a lavorare con i file) e non richiedono molto da usare in uno scenario a macchina singola.

Sul lato di Ruby (che sono meno familiarità con), ecco alcuni link che si possono trovare utili:

Sul.lato NET, qui ci sono alcuni link relativi ad esplorare per ulteriori informazioni:

+0

Le vostre ipotesi sono corrette. Cosa consiglieresti con priorità di facilità e tempo. Entrambe le app sono in esecuzione sullo stesso computer e le scrivo entrambe. – tybro0103

+0

Per quello che descrivi, probabilmente userò Named Pipes. IIRC, Ruby ha librerie integrate che facilitano l'interazione con pipe denominate, e in .NET ci sono un certo numero di API integrate per l'esecuzione di letture/scritture asincrone su pipe con nome. Inoltre, WCF ha anche il supporto per loro. Aggiornerò la mia risposta per fornire collegamenti a risorse pertinenti. – LBushkin

1

Una soluzione ovvia sarebbe utilizzare un messaggio di rete di sorta. Una connessione TCP/IP di breve durata o, in particolare se entrambe le app sono sullo stesso host, un semplice pacchetto UDP.

L'applicazione C# accetta le connessioni (se TCP), legge gli eventi dal socket e infine li elabora.

0

Ad ampliare la risposta di Martin, si potrebbe considerare un protocollo di messaggistica con le librerie disponibili in entrambe le lingue di destinazione. Mi viene in mente qualcosa come Stomp.

0

Probabilmente si potrebbe fare qualcosa con code di messaggi, in particolare uno che supporta più piattaforme e lingue, come ActiveMQ. Suppongo che avrebbe la capacità di aggiungere un gestore per un evento ricevuto messaggio in modo da poter ottenere la consegna asincrona.

Problemi correlati