Pregunta

Tengo dos relacionado con los procesos que utilizan .NET asambleas como los plugins.Sin embargo, el proceso puede ser iniciado o detenido en cualquier momento.Yo no puedo confiar en un proceso particular de ser el servidor.De hecho, puede haber varias copias ejecución de uno de los procesos, pero sólo uno de los otros.

Inicialmente se implementó una solución de base de este artículo.Sin embargo, esto requiere la implementación de un servidor esté funcionando antes de que el cliente.

Cuál es la mejor manera de implementar algún tipo de notificación al servidor cuando el cliente(s) que se estaban ejecutando en primer lugar?

¿Fue útil?

Solución

El uso de la memoria compartida es más difícil porque tendrás que administrar el tamaño del búfer de memoria compartida (o simplemente pre-asignar suficiente).Además, tendrás que gestionar manualmente las estructuras de datos que pones ahí.Una vez que lo han probado y funcionando sin embargo, será más fácil para usar y probar, debido a su simplicidad.

Si usted va a la interacción remota de la ruta, puede utilizar el IpcChannel en lugar de TCP o HTTP canales para un único sistema de comunicación mediante Canalizaciones con Nombre. http://msdn.microsoft.com/en-us/library/4b3scst2.aspx.El problema con esta solución es que usted tendrá que venir para arriba con un tipo de registro de la solución (ya sea en la memoria compartida o algún otro almacén persistente) que los procesos pueden registrar sus extremos con.De esa manera, cuando usted está buscando para ellos, usted puede encontrar una manera para consulta de todos los extremos que se están ejecutando en el sistema y usted puede encontrar lo que estás buscando.Los beneficios de ir con Remoting son que la serialización y la llamada al método son todos bastante sencillo.También, si usted decide mudarse a varias máquinas en una red, usted podría simplemente mueva el interruptor a utilizar los canales de las redes en su lugar.Los contras son que la comunicación Remota se puede volver frustrante, a menos que se separe claramente lo que son "Remotas" llamadas de lo que son "Locales" de las llamadas.

No sé mucho acerca de WCF, pero que también podría ser vale la pena considerar.Araña sentido, dice que es probable que tenga una solución más elegante a este problema...tal vez.

Como alternativa, puede crear un "servidor" proceso que es independiente de todos los otros procesos y que se puso en marcha (el uso de un sistema de exclusión Mutua para asegurarse de que más de uno no se pone en marcha) para actuar como un intermediario entre el registro y centro neurálgico para todos los otros procesos.

Una cosa más que mirar en el modelo de Publicación y suscripción para eventos (Pub/Sub).Esta técnica ayuda cuando tienes un oyente que se inicia antes que el origen del evento está disponible, pero usted no quiere esperar para inscribirse en el evento.El "servidor" proceso de controlar el evento de registro para vincular a los publicadores y suscriptores.

Otros consejos

¿Por qué no organizar el servidor y el cliente en ambos lados, y quien viene primero pasa a ser el servidor?Y si el servidor se cae, el cliente que aún está activa interruptores de funciones.

Hay muchas maneras de manejar el IPC (.net o no) y a través de una red TCP/HTTP túnel es una manera...pero puede ser una muy mala elección (dependiendo de las circunstancias y ambiente).

La memoria compartida y canalizaciones con nombre de dos maneras (y sí que se puede hacer en .Net) que podría ser la mejor solución para usted.También existe la clase de la CIP en el .Net Framework...pero yo personalmente no me gustan debido a algunos AppDomain problemas...

Estoy de acuerdo con Garo.

El uso de un pub/sub servicio sería una gran solución.Obviamente, esto significa que este servicio tendría que estar en funcionamiento antes de que cualquiera de los otros dos.

Si desea omitir el pub/sub sólo puede implementar el servicio en ambas aplicaciones con diferentes puntos finales.Cuando cualquiera de las aplicaciones que se puso en marcha, intenta acceder a otro objeto conocido a través de la CIP proxy.Si el proxy falla, el otro objeto que no está.

-Scott

He pasado 2 días serpenteando a través de todas las opciones disponibles para el IPC, mientras busca una fiable, sencilla y rápida manera de hacer full-duplex IPC. IPCLibrary, que he encontrado en Codeplex.com es hasta el momento funciona a la perfección de todas las opciones que he probado.Todo ello con sólo 7 líneas de código.:D Si alguien tropieza con esta tratando de encontrar una comunicación full-duplex IPC, se ahorrará un montón de tiempo y darle a esta biblioteca de un intento.Agarrar el código fuente, compilar el data.dll y sigue los ejemplos dados.

HTH, Circ

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