[我正在尝试使用NamedPipeWrapper(https://github.com/acdvorak/named-pipe-wrapper)在Winforms应用程序和Windows服务之间进行通信,而我在服务器端即服务方面遇到了麻烦。
代码位于其中,用于接收消息,但是,当服务正常运行时,什么也没有发生,并且在VS上通过调试运行会告诉我永远不会到达代码。我可以让它工作的唯一方法是ifi创建一个函数,这意味着该服务始终在持续工作:
public NamedPipeServer<string> server = new NamedPipeServer<string>("NamedPipe");
private readonly ISet<string> client = new HashSet<string>();
public WinService()
{
InitializeComponent();
server.ClientConnected += OnClientConnected;
server.ClientDisconnected += OnClientDisconnected;
server.ClientMessage += OnClientMessage;
server.Error += OnError;
server.Start();
while (KeepRunning)
{ }
server.Stop();
}
private bool KeepRunning
{
get
{
if (sc.Status.ToString() == "Running")
return false;
return true;
}
}
[github文章上的示例代码显示了此操作,以使控制台应用程序保持关闭状态,但是我担心它会停止其余服务的运行(我正在使用计时器来触发事件)。
此系统是否会导致计时器停止运行,有没有什么方法可以使服务保持服务等待来自命名管道的消息,而无需诉诸使用此方法?这种方法似乎要占用大量内存(〜300mb),而我计划将其添加到其中的某些服务器可能没有多余的内存。
[我正在尝试使用NamedPipeWrapper(https://github.com/acdvorak/named-pipe-wrapper)在Winforms应用程序和Windows服务之间进行通信,而我在服务器端即服务方面遇到了麻烦。
众所周知,调试服务很难。它们必须通过服务系统进行注册和启动的方式。需要手动附加调试器。他们can not display a UI since Vista所在的部分。
有些人已经开始在控制台应用程序中进行服务调试和开发。控制台没有负担,很难模拟服务环境,因此您可以输出调试消息。当然,您也可以使用TaskSheduler之类的方法完全摆脱服务。它拥有所有权力,然后拥有一些权力,但没有任何问题。甚至Microsoft也已经将服务中的内容过渡到了其中。
对于此软件包,Windows服务主体似乎充当代码的“服务器”端,但是将winforms应用程序作为服务器,而将服务作为客户端将可以工作。