none
Instancias del puerto serial en dos procesos a la vez RRS feed

  • Pregunta

  • Hola, mi duda o mejor dicho mi problema es el siguiente estoy desarrollando una aplicación la cual utiliza dos procesos por separados (servicios de windows ) y en cada uno de estos servicios interactuo con un modem gsm el cual se conecta a un puerto serial el problema es que si tengo abierto el puerto en un servicio no me permite abrirlo en el otro servicio y si o si necesito tenerlo abierto al mismo tiempo en los dos servicios. Alguien sabe como puedo implementar esto que pueda el modem interactuar con los dos servicios a la vez. Desde ya muchas gracias.
    jueves, 16 de abril de 2009 20:49

Todas las respuestas

  • Podrías implementar un tercer servicio que sea el "servicio manejador del puerto". Haz que sea este servicio el único que abre el puerto. Desde los otros dos servicios, utiliza un mecanismo de comunicación inter-procesos para que los dos le pidan al manejador del puerto el envío y recepción de los datos que precisen. El manejador del puerto tendá que realizar el arbitraje entre ambos cuando realicen peticiones simultaneas.

    viernes, 17 de abril de 2009 6:45
  • Gracias Alberto por su tiempo, la verdad es buena esa idea, usted como me sugiere que desarrolle la comunicación inter proceso
    viernes, 17 de abril de 2009 14:25
  • Se me ocurren un par de ideas. La primera es la de aprovechar que un servicio escrito en .Net permite contener varias clases heredadas de ServiceBase e iniciarlas todas a la vez (en otras palabras, sería algo asi como meter varios servicios dentro de un servicio). En este caso, los distintos servicios podrían usar variables estáticas dentro de alguna clase contenida en el propio programa para comunicarse entre sí (serían distintos hilos de un mismo proceso y por lo tanto, estrictamente hablando, no habría comunicación entre procesos).

    La segunda idea es usar o bien Remoting (a través de un puerto TCP) o WCF, o bien Canalizaciones con Nombre("Named Pipes"). Esta última opción solo es cómoda si se utiliza el Framework 3.5, ya que en versiones anteriores requería P/Invoke. Pero en 3.5 hay ya clases para hacer la comunicación mediante Canalizaciones.

    http://msdn.microsoft.com/es-es/library/bb546102.aspx
    http://msdn.microsoft.com/es-es/library/bb546085.aspx

    viernes, 17 de abril de 2009 15:05