c# - servidor - sockets c sharp
Comunicación entre procesos entre la aplicación C#y la aplicación C++ no administrada (8)
Crea un objeto COM de Singleton. Mantenga los datos en este objeto COM, que se pueden leer mediante aplicaciones C ++ y C #.
Tengo dos servicios de Windows, el primero escrito en C # y el segundo escrito en C ++ no administrado, quiero saber cómo puedo hacer la comunicación entre procesos de dos vías.
Hay varias formas de hacerlo, pero creo que la mejor manera sería usar WCF y COM +. Si aloja un servicio en COM +, puede acceder a él a través de WCF en su servicio .NET, y a través de las interfaces COM en su código no administrado.
Es posible que desee consultar las siguientes secciones de la documentación de MSDN para comenzar:
Integración de WCF Services con COM +: http://msdn.microsoft.com/en-us/library/bb735856.aspx
Integración con la descripción general de las aplicaciones COM +: http://msdn.microsoft.com/en-us/library/ms734723.aspx
Los enchufes son probablemente tu mejor opción.
Con tomas de corriente no necesariamente está vinculado a que ambos programas estén en la misma máquina.
Además, es probable que sea la opción más portátil (diablos, Windows incluso tiene select () para enchufes).
Los sockets y Named Pipes son dos opciones bien admitidas en entornos administrados y no administrados.
Use DCOM / RPC o conductos con nombre: cualquier otra cosa es insegura, hacky o ambas cosas.
Yo diría enchufes y un sistema de mensajes. Revisa nuestros Buzones de Protocolo de Google .
Si la comunicación entre procesos siempre se va a hacer en la misma máquina, los conductos con nombre son el camino a seguir porque son más rápidos que otras opciones.
Sin embargo, si existe la más mínima posibilidad de que esta comunicación se produzca a través de los límites de la máquina en algún momento, vaya con el enfoque de socket. Para C ++, necesitará el archivo de encabezado winsock2.h. En C #, use el espacio de nombres System.Net.Sockets
.
Ha pasado un tiempo desde que hice C ++ no administrado, pero mi recuerdo es que tendrás que escribir menos código C ++ si creas el servidor en el lado C ++ y luego usas la clase TcpClient
en el lado C #.
Yo diría que redis sería la mejor solución para cualquier tipo de comunicación entre procesos