问题
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.
回答1:
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
回答2:
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.
回答3:
WCF will be an overkill for communication on the same computer. Pipes is a simpler and more effective solution.
回答4:
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.
回答5:
You could use Windows Communication Foundation and IPC (inter-process communication) to communicate with your service and execute your method.
来源:https://stackoverflow.com/questions/1979016/how-to-call-method-from-running-windows-service