2010-09-27 9 views

Respuesta

6

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:

En el.lado NET, aquí hay algunos enlaces de interés para explorar en busca de más información:

+0

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

+0

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

1

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.

0

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.

0

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.

Cuestiones relacionadas