How to call method from running windows service

走远了吗. 提交于 2019-11-26 21:37:55

问题


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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!