我在Windows服务(.NET C#)中有一个计时器。我需要能够从外部程序中更改经过的值。如果定时器当前正在运行,我需要能够缩短来自外部程序的时间经过值。我正在考虑在服务中使用一个公共方法来改变计时器的过期值并重新启动计时器,但是外部程序是否可以在Windows服务上调用公共方法?调用Windows服务的公共方法
回答
总之,不可能在另一个进程中直接调用函数。包含您想要访问的函数(在本例中为Windows服务)的进程需要通过某种IPC(进程间通信)来公开它。您选择哪种类型的IPC可能取决于通信的复杂程度以及“客户端”是否为.NET应用程序。
如果您的需求很简单(例如只设置一个计时器值),或者如果您的客户端不使用.NET,那么使用命名管道(或TCP,如果您需要从另一台物理机器访问服务)最好的选择。命名管道和TCP都为您提供了一个Stream,您可以将消息写入另一端并在其上读取。
如果您需要公开许多不同的函数或发送和接收复杂的数据类型,并且如果您在两端都使用.NET,.NET Remoting或WCF可能是最好的。 .NET Remoting更简单,但有更多的限制; WCF非常灵活,但学习曲线陡峭。
您不能直接在Windows服务进程中调用方法,但可以让Windows服务将此函数作为WCF服务公开。 Windows服务也将充当服务主机。这是可能的,并不复杂。
是的,这是可能的。
您可能需要考虑在您的服务上创建NetNamedPipe端点并通过该接口控制服务。
NetNamedPipeBinding binding = new NetNamedPipeBinding();
MyService myService = new MyService(binding,
new EndpointAddress("net.pipe://localhost/MyService"));
myService.ResetTimer(30);
MyService未使用2个参数.. – 2013-11-21 06:40:22
旧的(非WCF)服务可以使用.NET Remoting。有关如何开始的一些信息,请看看here。这是WCF之前的跨进程边界的应用程序之间进行通信的方式。
- 1. 从公共服务方法调用活动时的NullPointerException
- 2. 调用公共方法
- 3. 安装Windows服务Skype的公共API
- 4. 如何在Clojure中调用公共类的非公共方法?
- 5. 调用Windows窗体中的公共方法
- 6. Windows 7作为公共服务器
- 7. 调用公共方法导致NullPointerException - Android
- 8. 盲目地调用公共方法(C#)
- 9. PHP限制调用公共方法
- 10. 的Windows服务的调用OnStop()方法不会被调用
- 11. 在Web服务方法之间使用公共属性
- 12. 调用公共方法中的方法与此指针
- 13. Python:公共方法调用他们的'兄弟'私有方法
- 14. Java:反射调用实现公共接口的非公共类中的方法
- 15. Rhino Mocks验证私有方法是从公共方法调用
- 16. 公共Modbus服务器
- 17. 公共CLSI服务器
- 18. 公共SOAP Web服务
- 19. 从共享服务调用组件的方法
- 20. 如何在服务中创建公共方法
- 21. 公共静态方法vs公共方法
- 22. 无法从子实例调用基类的公共方法
- 23. 模拟的公共方法
- 24. 无法从Windows Phone 7模拟器调用WCF服务方法
- 25. 嘲笑ClassUnderTest |中的公共方法调用用的ArrayList
- 26. 无法公开ADO.NET数据服务中的服务方法
- 27. 防止公共服务过度使用
- 28. 如何使用公共asmx服务
- 29. 在执行时调用Windows服务的方法
- 30. 如何在Windows服务(c#)中调用我的方法?
.NET Remoting被认为是传统技术,不建议用于新开发(http://msdn.microsoft.com/zh-cn/library/72x4h507%28VS.85% 29.aspx)。 Windows Communication Foundation(WCF)是批准的方式。如果您不熟悉WCF,请观看此视频(http://www.dnrtv.com/default.aspx?showNum=135)以获取该技术的介绍。 – 2009-12-09 14:38:29