C'è un modo per generare un evento in C# da un'applicazione esterna? In particolare da Ruby? Ho bisogno di far succedere qualcosa in C# da un'applicazione di rotaie.Aumenta l'evento in C# dall'applicazione esterna?
risposta
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:
- Using Named Pipes for Interprocess Communication In Ruby
- Communicating Between Ruby and PHP Using Named Pipes
Sul.lato NET, qui ci sono alcuni link relativi ad esplorare per ulteriori informazioni:
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.
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.
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.
- 1. Compilazione C++ in Rcpp con libreria C esterna
- 2. La "C" esterna ha qualche effetto in C?
- 3. Aumenta le pagine dopo ogni scorrimento Obiettivo-C
- 4. Elimina puntatore di matrice C++ quando aumenta il puntatore?
- 5. L'ereditarietà aumenta l'accoppiamento?
- 6. Ambito di una variabile esterna principale C
- 7. La "C" esterna è di tipo separato?
- 8. in che modo la "C" esterna consente il codice C++ in un file C?
- 9. aumenta il timeout del server in eclissi
- 10. Aumenta disposizione PySpark in fase di esecuzione
- 11. formato libero heap non aumenta in Maven
- 12. aumenta la dimensione massima dell'articolo in memcached?
- 13. Come specificare la dipendenza dalla libreria C esterna in .cabal?
- 14. Visual Lisp: come chiamare le funzioni in DLL C++ esterna
- 15. Layout fluido CSS: margin-top in base alla percentuale aumenta quando aumenta la larghezza del contenitore
- 16. Libreria esterna in Postman
- 17. Come utilizzare la "C" esterna per chiamare le funzioni C++ in C
- 18. Aumenta le dimensioni dell'intestazione pdfMake
- 19. Qt Aumenta QTabWidget QTabBar size
- 20. Aumenta le dimensioni dello stack in Linux con setrlimit
- 21. Il metodo ricorsivo aumenta la complessità ciclomatica
- 22. Casella combinata per chiave esterna in DataGridView
- 23. Doppia chiave esterna in postgresql
- 24. Usa variabile esterna in array_filter
- 25. Libreria esterna in Metro UI
- 26. Ottimizzazione chiave esterna in SQLite
- 27. condizionale chiave esterna in SQL
- 28. compresi libreria esterna in Yii
- 29. Inizializzazione dei membri quando si eredita dalla struttura esterna C
- 30. ImportError da Cython quando si collega una libreria C esterna
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
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