Pregunta

Supongamos que tengo dos aplicaciones escritas en C#.La primera es una aplicación de terceros que se genera un evento llamado "OnEmailSent".

La segunda es una aplicación personalizada que he escrito que me gustaría de alguna manera suscribirse a la "OnEmailSent" de la primera aplicación.

Hay alguna manera de que de alguna manera podría adjuntar la segunda aplicación a un ejemplo de la primera aplicación para escuchar "OnEmailSent" evento?


Así que para que la aclare, en mi caso concreto es que tenemos la costumbre de terceros aplicación escrita en c# que se genera un "OnEmailSent" del evento.Podemos ver que el evento se encuentra el uso de un reflector.

Lo que quiero hacer es tener algunas otras acciones que tienen lugar cuando este componente envía un correo electrónico.

La manera más eficiente, podemos pensar en ser capaces de utilizar alguna forma de IPC como anders ha sugerido y escuchar la OnEmailSent evento provocado por el componente de terceros.

Debido a que el componente está escrito en C# que estamos jugando con la idea de escribir otra aplicación en C# que puede unirse a la ejecución del proceso y cuando se detecta la OnEmailSent evento ha sido elevar va a ejecutar su propio código de manejo de eventos.


Yo puede ser que falte algo, pero por lo que puedo entender de cómo la comunicación remota de las obras es que no tendría que ser un servidor de la definición de algún tipo de contrato que el cliente puede suscribirse.

Yo estaba más pensando en un escenario en el que alguien ha escrito una aplicación independiente como el outlook, por ejemplo, que expone los acontecimientos que me gustaría suscribir desde otra aplicación.

Supongo que el escenario que estoy pensando es el .net depurador y cómo se puede adjuntar a la ejecución de las asambleas para inspeccionar el código mientras se ejecuta.

¿Fue útil?

Solución

En orden para dos aplicaciones (procesos separados) para eventos de intercambio, deben estar de acuerdo en cómo estos eventos se comunican.Hay muchas maneras diferentes de hacer esto, y exactamente el método que se use puede depender de la arquitectura y el contexto.El término general para este tipo de intercambio de información entre los procesos es Comunicación entre procesos (IPC).Existe muchas maneras estándar de hacer IPC, siendo los más comunes los archivos, tuberías, (red) sockets, llamadas a procedimiento remoto (RPC) y la memoria compartida.En Windows también es común el uso de la ventana de mensajes.

No estoy seguro de cómo funciona esto .NET/C# aplicaciones en Windows, pero en aplicaciones Win32 nativas puede gancho en el bucle de mensaje de procesos externos y "espía" en los mensajes que están enviando.Si el programa genera un mensaje de evento cuando la función es llamada, esta podría ser una manera de detectar.

Si la aplicación de ambas aplicaciones usted puede elegir para utilizar cualquier IPC método que prefiera.Sockets de red y de alto nivel basado en socket protocolos como HTTP, XML-RPC y SOAP son muy populares en estos días, ya que permiten hacer que las aplicaciones se ejecuten en diferentes máquinas físicas como bien (dado que están conectados a través de una red).

Otros consejos

Usted puede tratar de Administrado Espía y para el acceso mediante programación ManagedSpyLib

ManagedSpyLib introduce una clase llama ControlProxy.Un ControlProxy es una representación de un Sistema.Windows.Los formularios.Control en otro proceso.ControlProxy permite usted obtener o establecer propiedades y suscribirse a los eventos como si estuviera ejecuta dentro del destino proceso.Uso ManagedSpyLib para automatización de las pruebas, el registro de eventos para la compatibilidad, proceso cruzado la comunicación, o el ensayo de whitebox.

Pero esto podría no funcionar para usted, depende de si ControlProxy de alguna manera se puede acceder al evento que busca dentro de su aplicación de terceros.

Usted también podría usar Reflexil

Reflexil permite IL modificaciones mediante el uso de la poderosa Mono.Cecil biblioteca escrito por Jb EVAIN.Reflexil funciona como Reflector de plug-in y está dirigida especialmente hacia el código IL la manipulación.Esto se logra mediante la proponer una instrucción editor y permitiendo C#/VB.NET de código la inyección.

Usted puede utilizar la comunicación remota o WCF.Ver http://msdn.microsoft.com/en-us/library/aa730857(VS.80).aspx#netremotewcf_topic7.

¿Cuál es la naturaleza de la que OnEmailSent caso de que la aplicación de terceros?Quiero decir, ¿cómo sabes que la aplicación es la activación de un evento?

Si usted está planeando en hacer la comunicación entre procesos, la primera pregunta que usted debe preguntarse es:De verdad es necesario?

Sin cuestionar sus motivos, si usted realmente necesita para hacer la comunicación entre procesos, usted necesitará algún tipo de mecanismo.La lista es larga, muy larga.A partir de simple WM_DATA mensajes personalizados de protocolos TCP para muy complejo de servicios Web que requieren nuevas infraestructuras.

Esto trae la pregunta, ¿qué es lo que están tratando de hacer exactamente?¿Qué es esta aplicación de terceros, no tiene control sobre?

También, el depurador tiene una muy invasivo de procesos de depuración.No esperes que ser la norma entre los mecanismo utilizado por todas las demás aplicaciones.Como cuestión de hecho, no lo es.

Se puede implementar un escenario similar con consultas de SQL Server 2005 notificaciones de cambio por mantener una persistente SqlConnection con una .NET aplicación que bloquea hasta que los cambios de los datos en la base de datos.

Ver http://www.code-magazine.com/article.aspx?quickid=0605061.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top