How to call method from running windows service
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.Ge开发者_如何学JAVAtMyRandomNumber().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.
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
- Remoting in C# (Link no Longer available)
- How To Host .NET Remoting Objects in Windows Service Application
- How to Use .Net Remoting Using (Link no Longer available)
- A Simple Introduction to .NET 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.
You could use Windows Communication Foundation and IPC (inter-process communication) to communicate with your service and execute your method.
精彩评论