¿Hay alguna manera de generar un evento en C# desde una aplicación externa? En particular, de Ruby? Necesito causar algo en C# a partir de una aplicación de rieles.¿Sublevar evento en C# desde una aplicación externa?
Respuesta
Supongo que por "aplicación externa" se entiende algo que está fuera del espacio de proceso del código C#. Además, supongo que no se está refiriendo a los eventos C#, que no son un concepto que existe fuera del dominio de implementación de .NET, no son algo a lo que se pueda acceder desde fuera del código.
Así que la respuesta general a esta pregunta es "sí, es posible", pero como básicamente intenta enviar notificaciones entre procesos, necesitará usar algún tipo de IPC mechanism.
.NET tiene una API rica para realizar IPC, que va desde conductos con nombre, a DCOM, a protocolos de red de bajo nivel como TCP/IP. El enfoque que utilice dependerá del entorno en el que este proceso necesite comunicarse (en una sola máquina, en máquinas en una intranet, en Internet, etc.). También dependerá del tipo de información que intercambie y de cuánto esfuerzo esté dispuesto a gastar. Para las aplicaciones .NET 3.5, generalmente puede encontrar una implementación compatible utilizando WCF as the unifying framework.
Obviamente, todo esto depende de su capacidad para modificar la implementación (leer el código fuente) de la aplicación .NET en la que intenta generar un evento. Si no puede hacer eso, y no existe un mecanismo de IPC existente en ese código, es probable que se quede atascado.
ACTUALIZACIÓN: En respuesta a su comentario:
¿Qué le recomendaría con prioridad de la facilidad y el tiempo. Ambas aplicaciones se están ejecutando en la misma máquina, y yo las escribo yo tanto
Me gustaría considerar el uso de Named Pipes. Las tuberías con nombre son originalmente un concepto de Unix, pero también están disponibles en Windows. Tienen una interfaz de programación variable (son similares a trabajar con archivos) y no requieren mucho para usar en un escenario de una sola máquina.
En el lado de Ruby (que no estoy muy familiarizado), aquí enlace que te pueden ser de utilidad:
- Using Named Pipes for Interprocess Communication In Ruby
- Communicating Between Ruby and PHP Using Named Pipes
En el.lado NET, aquí hay algunos enlaces de interés para explorar en busca de más información:
Una solución obvia sería utilizar un mensaje de red de algún tipo. Ya sea una conexión TCP/IP de corta duración o, especialmente si ambas aplicaciones están en el mismo host, un simple paquete UDP.
La aplicación C# aceptaría conexiones (si es TCP), lea los eventos del socket y finalmente trátelos.
Para ampliar la respuesta de Martin, usted podría considerar un protocolo de mensajería con las bibliotecas disponibles en ambos idiomas de destino. Me viene a la mente algo como Stomp.
Probablemente pueda hacer algo con colas de mensajes, particularmente una que admite múltiples plataformas y lenguajes, como ActiveMQ. Asumiría que tendría la capacidad de agregar un controlador para un evento recibido por mensaje para que pueda obtener una entrega asincrónica.
- 1. ¿Iniciar una aplicación externa desde una extensión de Google Chrome?
- 2. Lanzamiento de la aplicación externa desde mi aplicación
- 3. "Incrustar" JasperServer en una aplicación web externa?
- 4. Minimice una aplicación externa con Delphi
- 5. Creando una aplicación de escritorio C#, comenzando desde cero, consejos
- 6. Abra un archivo con una aplicación externa en Java
- 7. vinculación externa en C
- 8. Cómo modelar una clave externa en una aplicación Django reutilizable?
- 9. Objetivo-C: obtener información del menú de la aplicación externa
- 10. ¿Obtiene la selección actual en WindowsExplorer desde una aplicación C#?
- 11. Haciendo Thrift llama desde una aplicación C++ en Windows
- 12. Lanzar una excepción desde el evento AppDomain.AssemblyLoad
- 13. ¿Cómo funciona una declaración "C" externa?
- 14. Ejecutar aplicación externa sin extensión .exe
- 15. Código para iniciar la aplicación externa explícitamente
- 16. C++: biblioteca externa en Eclipse CDT
- 17. Gráfico en vivo para una aplicación C
- 18. ¿Suscribirse evento al evento en C#?
- 19. Evento OnExit para una aplicación Swing?
- 20. Sirviendo imágenes CSS con PHP desde una carpeta pública externa
- 21. Ejecuta una aplicación C# desde el script de Python
- 22. Cómo reutilizar un ensamblado .Net desde una aplicación C pura
- 23. Reiniciar la máquina desde una aplicación C#/WPF
- 24. ¿Cómo puedo usar el código Delphi desde una aplicación C#?
- 25. Uso de aplicaciones FastCGI desde una aplicación C#
- 26. Llamar a una aplicación desde otra aplicación
- 27. C# - Capturar mensajes de Windows desde una aplicación específica
- 28. Llamando al método `Principal` de una aplicación de consola desde una aplicación de formulario (mediante un clic de evento)
- 29. ¿Es posible utilizar HttpBrowserCapabilities desde una aplicación de consola C#?
- 30. Cómo depurar una biblioteca externa (OpenCV) en Visual C++?
Tus suposiciones son correctas. ¿Qué recomendarías con prioridad de facilidad y tiempo? Ambas aplicaciones se ejecutan en la misma máquina y las escribo yo mismo. – tybro0103
Por lo que describes, probablemente buscaría usar Named Pipes. IIRC, Ruby tiene bibliotecas integradas que hacen que la interacción con los nombres de las tuberías sea fácil, y en .NET hay una serie de API integradas para realizar lecturas/escrituras asincrónicas en las canalizaciones con nombre. Además, WCF también tiene soporte para ellos. Actualizaré mi respuesta para proporcionar enlaces a recursos relevantes. – LBushkin