I have created and started windows service Service1 (with exe as MyService.exe) using c# 2005. . I have included a method GetMyRandomNumber() that returns a random double value.
The problem here is how could use this running service and how could i call the method.
I have tried adding reference of MyService.exe and access the method as -
Service1 s = new Service1();
MessageBox.Show(s.GetMyRandomNumber().ToString());
But found that the method is not called from the running instance of the service i.e. even though i stop the service the statements are executed.
Could someone explain me how can I call the method from running instance of the service.
Thanks for sharing your valuable time.
Choose "Visual C#" >> "Windows" project type and select "Windows Service" from the right hand side and name the project "TestWindowsService" as shown in the following screenshot. After you click "OK", the project will be created and you will see the design view of the service as shown in the following screen.
In your code, you aren't actually calling the service, instead you are referencing the executable and invoking a method from that assembly (at run time the .NET Framework will use a local assembly to execute the code, not your running service).
To do what you want, you have a number of options.
In .NET 2.0, you would make use of .NET Remoting. You create a remoting interface, which other assemblies can use to invoke methods across executables.
In .NET 3.0, remoting was replaced by WCF. Your service would become a WCF service, which would expose the GetRandomNumber() as part of its data contract. Applications can consume the contract and connect to your service to call the method.
There are a number of good tutorials on the web for both .NET Remoting or its replacement, Windows Communication Foundation.
You should have a look at Remoting
WCF will be an overkill for communication on the same computer. Pipes is a simpler and more effective solution.
Communicating with a running service is no different from invoking methods on any other running process. That means that you will need to dig out your standard tools for process-to-process communication.
Windows Communication Foundation (WCF) would be my default choice. You can host a WCF service in your Windows Service and expose it through a Named Pipe endpoint for efficient communication.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With