2010-03-16 16 views
5

Necesito implementar algún tipo de mecanismo de comunicación en mi aplicación, para enviar notificaciones/mensajes desde una instancia de aplicación a todas las demás. Este es un escenario normal en el que alguien agrega elementos o elimina elementos y desea notificar a otros usuarios que esto ha sucedido.Mensajería en la red local con .NET

La aplicación se ejecuta en el cliente y se conecta a una base de datos en la red local. Por lo tanto, no es como si todos los clientes tuvieran acceso a una instancia de servidor de la aplicación. Por lo que sé, podría usar MessageQueues o alguna forma de sondeo de base de datos, donde tengo una tabla que almacena todos los mensajes (no es ideal).

Problema es que necesito implementar esto muy rápidamente, por lo que lamentablemente no puede ser muy complejo, pero necesita la solución más rápida y sencilla.

gracias por la ayuda!

Respuesta

2

Parece que le resultará más fácil utilizar la simultaneidad optimista. Suponga que las cosas no se borrarán y tratará con el cliente afectado cuando ocurra, lo que debería ser más fácil que desarrollar algún tipo de sistema de notificación concurrente que no se escale ...

Aparte de eso, si la lista de clientes es pequeña, el sondeo de db es la manera más fácil de hacerlo sin agregar otra capa de comunicación a su sistema, solo agregue una tabla e implemente una biblioteca de clases para que todos puedan hacer sus cosas, si puede acceder al DB usted puede para averiguar acerca de los elementos eliminados, etc.

+0

Sí, estaba pensando en la concurrencia optimista, pero esa no es una opción para mí, ya que tengo que notificar a los usuarios cuando se inserta un nuevo elemento (dentro de un par de segundos de que esto suceda). Agregar una capa de mensajería completa no es ideal, pero me permitiría usarlo extensamente en el sistema. El problema es que en mi aplicación de prueba recibo MSMQ: problemas de dominio ... así que creo que las encuestas serán a menos que haya otras opciones. – Richard

+0

MSMQ es un perro. La forma "correcta" de hacer esto es probablemente algo así como un sistema de publicación/suscripción, que usted podría lanzar o encontrar algunas bibliotecas. Sé que SQL Server Service Broker tiene algunas características de notificación múltiple que pueden ajustarse a sus propósitos (es una cola de mensajes en SQL, diseñada para que los procesos almacenados notifiquen a otras entidades que algo ha cambiado). – Spence

+0

Bueno, MSMQ y todas las demás opciones habrían tardado demasiado, por lo que ya se implementó usando encuestas. Acabo de crear una tabla, sondearla cada N segundos y luego, si hay un mensaje para este usuario, entonces léalo y trátelo, luego elimine este mensaje. Y donde sea necesario, solo crea un mensaje en la tabla para cada usuario. Cuando el usuario inicia sesión, asegúrese de borrar todos los mensajes para que no reciba 100 mensajes cuando inicie sesión. Todo es muy básico, pero funciona como lo necesito en nuestro pequeño sistema. Gracias. – Richard

0

Quizás le interese consultar la publicación de mi blog here, donde se analiza una posible implementación de un agregador de eventos entre procesos.

0

Creo que puede hacer esto con WCF. Tiene un enlace para las comunicaciones entre iguales.

0

pienso de votación el PP va a ser el camino más rápido. Algo realmente simple como, cuando una tabla tiene una modificación realizada, almacenar el tiempo que pasó en otra tabla, usar un disparador es una forma de hacerlo.

Sus clientes consultan esa tabla y comparan su tiempo de modificación local, si la hora de db es más reciente que la actualización.

Cualquier cosa más que eso se volvería compleja ..... especialmente con su requerimiento de 'un par de segundos'.

Puede implementar todo esto de una manera que podría reemplazarse con un método más pesado más adelante si es necesario.

+0

Sí, esta es la ruta que terminé tomando. Como dices, siempre que esté hecho de una manera que permita que se extienda está bien. Pero por ahora no puedo prever que necesite ser algo más complejo. – Richard

0

Dependiendo de la topología de su red, la opción natural sería una transmisión (misma subred) o multidifusión en varias subredes cuando se agrega algo nuevo.
Las transmisiones son bastante simples de programar, pero primero debe verificar si están permitidas en su red.

0

Usted debe estudiar primero Programación de sockets en C# abrir estos enlaces: http://www.codeproject.com/Articles/10649/An-Introduction-to-Socket-Programming-in-NET-using

http://socketprogramming.blogspot.com/

siguiente si u r un desarrollador de C# que será fácil hacerlo.

+0

Tenga en cuenta que [las respuestas solo de enlace] (http://meta.stackoverflow.com/tags/link-only-answers/info) no se recomiendan, las respuestas SO deberían ser el punto final de una búsqueda de una solución (vs. otra escala más de referencias, que tienden a quedar obsoletas en el tiempo). Considere agregar una sinopsis independiente aquí, manteniendo el enlace como referencia. –

Cuestiones relacionadas