2009-12-30 28 views
5

He creado e iniciado el servicio de Windows Service1 (con exe como MyService.exe) usando C# 2005.. He incluido un método GetMyRandomNumber() que devuelve un valor doble aleatorio.Cómo llamar al método desde el servicio de Windows

El problema aquí es cómo podría utilizar este servicio en ejecución y cómo podría llamar al método.

He intentado agregar referencia de MiServicio.exe y acceder al método -

Service1 s = new Service1(); 
MessageBox.Show(s.GetMyRandomNumber().ToString()); 

pero se encontró que el método no es llamado desde la instancia en ejecución del servicio es decir, a pesar de que detenga el servicio de las declaraciones son ejecutados.

Podría alguien explicarme cómo puedo llamar al método desde la ejecución de la instancia del servicio.

Gracias por compartir su valioso tiempo.

Respuesta

14

En su código, no son en realidad llamando al servicio, en vez usted está haciendo referencia al ejecutable e invoca un método de ese ensamblado (en tiempo de ejecución, .NET Framework usará un ensamblado local para ejecutar el código, no su servicio en ejecución).

Para hacer lo que quieras, tienes una serie de opciones.

En .NET 2.0, haría uso de .NET Remoting. Crea una interfaz remota, que otros ensamblados pueden usar para invocar métodos a través de ejecutables.

En .NET 3.0, la comunicación remota se reemplazó por WCF. Su servicio se convertiría en un servicio WCF, que expondría el GetRandomNumber() como parte de su contrato de datos. Las aplicaciones pueden consumir el contrato y conectarse a su servicio para llamar al método.

Hay una serie de buenos tutoriales en la web para .NET Remoting o su reemplazo, Windows Communication Foundation.

+2

+1 WCF sería la elección correcta en este escenario si está en .NET 3.0+. Para completar, me gustaría añadir que aunque WCF reemplaza a Remoting en casi todos los casos, todavía tiene un nicho para la comunicación entre dominios de aplicaciones. No usaría WCF para comunicarse a través de los límites de AppDomain, pero en todos los demás casos, WCF la elección correcta –

2

La comunicación con un servicio en ejecución no es diferente de invocar métodos en cualquier otro proceso en ejecución. Eso significa que deberá extraer sus herramientas estándar para la comunicación de proceso a proceso.

Windows Communication Foundation (WCF) sería mi opción predeterminada. Puede alojar un servicio WCF en su servicio de Windows y exponerlo a través de un punto final de Named Pipe para una comunicación eficiente.

2

WCF será un exceso para la comunicación en la misma computadora. Pipes es una solución más simple y más efectiva.

+1

WCF puede usar canalizaciones con nombre. http://msdn.microsoft.com/en-us/library/ms733769.aspx –

+2

Está usando C# 2005 (.Net 2.0?) por lo que WCF no es una opción. – Giorgi

+1

Buena observación. No me había dado cuenta de eso. –

Cuestiones relacionadas