使用命名管道在Winforms和Windows服务应用程序之间使用NamedPipeWrapper进行通信

问题描述 投票:0回答:2

[我正在尝试使用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),而我计划将其添加到其中的某些服务器可能没有多余的内存。

c# service pipe named-pipes
2个回答
0
投票

[我正在尝试使用NamedPipeWrapper(https://github.com/acdvorak/named-pipe-wrapper)在Winforms应用程序和Windows服务之间进行通信,而我在服务器端即服务方面遇到了麻烦。

众所周知,调试服务很难。它们必须通过服务系统进行注册和启动的方式。需要手动附加调试器。他们can not display a UI since Vista所在的部分。

有些人已经开始在控制台应用程序中进行服务调试和开发。控制台没有负担,很难模拟服务环境,因此您可以输出调试消息。当然,您也可以使用TaskSheduler之类的方法完全摆脱服务。它拥有所有权力,然后拥有一些权力,但没有任何问题。甚至Microsoft也已经将服务中的内容过渡到了其中。


0
投票

对于此软件包,Windows服务主体似乎充当代码的“服务器”端,但是将winforms应用程序作为服务器,而将服务作为客户端将可以工作。

© www.soinside.com 2019 - 2024. All rights reserved.