C# 在windows服务上调用公共方法

C# 在windows服务上调用公共方法,c#,.net,windows-services,timer,public-method,C#,.net,Windows Services,Timer,Public Method,我在windows服务(.NET C#)中有一个计时器。我需要能够更改外部程序的运行值。如果计时器当前正在运行,我需要能够缩短外部程序的时间经过值。我在考虑在服务中使用一个公共方法来更改计时器经过的值并重新启动计时器,但是外部程序可以在windows服务上调用公共方法吗 您不能直接调用Windows服务进程中的方法,但您可以让Windows服务将此函数公开为WCF服务。Windows服务也将充当服务主机。这是可能的,并不复杂。是的,这是可能的 您可能想考虑在您的服务上创建一个NETNAMEDBO

我在windows服务(.NET C#)中有一个计时器。我需要能够更改外部程序的运行值。如果计时器当前正在运行,我需要能够缩短外部程序的时间经过值。我在考虑在服务中使用一个公共方法来更改计时器经过的值并重新启动计时器,但是外部程序可以在windows服务上调用公共方法吗

您不能直接调用Windows服务进程中的方法,但您可以让Windows服务将此函数公开为WCF服务。Windows服务也将充当服务主机。这是可能的,并不复杂。

是的,这是可能的

您可能想考虑在您的服务上创建一个NETNAMEDBOST端点,并通过该接口控制服务。< /P>

NetNamedPipeBinding binding = new NetNamedPipeBinding();
MyService myService = new MyService(binding,
              new EndpointAddress("net.pipe://localhost/MyService"));
myService.ResetTimer(30);

较旧的(非WCF)服务可以使用.NET远程处理。查看一些关于如何开始的信息。这是WCF之前跨进程边界在应用程序之间进行通信的方式。

简而言之,不可能直接调用另一个进程中的函数。包含要访问的函数的进程(在本例中为Windows服务)需要通过某种IPC(进程间通信)公开它。您选择什么类型的IPC可能取决于通信的复杂程度,以及“客户端”是否是.NET应用程序

如果您的需求很简单(例如,只是设置一个计时器值),或者如果您的客户端不使用.NET,那么使用命名管道(或者TCP,如果您需要从另一台物理机器访问服务)可能是您的最佳选择。命名管道和TCP都为您提供了一个流,您可以在另一端向其写入消息和读取消息


如果您需要公开许多不同的函数或发送和接收复杂的数据类型,并且两端都使用.NET,则最好使用.NET远程处理或WCF。NET远程处理更简单,但约束更多;WCF非常灵活,但学习曲线更陡峭。

。网络远程处理被认为是一种传统技术,不建议用于新开发()。Windows通信基金会(WCF)是被批准的方式。如果您不熟悉WCF,请观看此视频()以了解该技术的介绍。