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

C# 使用命名管道在Winforms和使用NamedPipeWrapper的Windows服务应用程序之间进行通信,c#,service,pipe,named-pipes,C#,Service,Pipe,Named Pipes,我试图使用NamedPipeWrapper()在winforms应用程序和windows服务之间进行通信,但服务器端(即服务)出现问题 代码是用来接收消息的,但是当服务正常运行时,不会发生任何事情,并且在VS上运行调试会告诉我代码永远不会到达。我能让它工作的唯一方法是,如果我创建了一个功能,这意味着该服务始终持续工作: public NamedPipeServer<string> server = new NamedPipeServer<string>("

我试图使用NamedPipeWrapper()在winforms应用程序和windows服务之间进行通信,但服务器端(即服务)出现问题

代码是用来接收消息的,但是当服务正常运行时,不会发生任何事情,并且在VS上运行调试会告诉我代码永远不会到达。我能让它工作的唯一方法是,如果我创建了一个功能,这意味着该服务始终持续工作:

        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;
            }
        }
public NamedPipeServer server=new NamedPipeServer(“NamedPipe”);
private readonly ISet client=new HashSet();
公共服务()
{
初始化组件();
server.ClientConnected+=OnClientConnected;
server.ClientDisconnected+=OnClientDisconnected;
server.ClientMessage+=OnClientMessage;
server.Error+=OnError;
server.Start();
同时(继续修剪)
{ }
server.Stop();
}
私人布尔基宁酒店
{
得到
{
如果(sc.Status.ToString()=“正在运行”)
返回false;
返回true;
}
}
github文章中的示例代码为控制台应用程序显示了这一点,以保持其关闭,但我担心它会停止其余服务的运行(我正在使用计时器触发事件)

该系统是否会导致计时器停止运行,是否有任何方法可以让服务等待来自指定管道的消息,而无需使用此方法?这种方法似乎占用了大量内存(~300mb),我计划将其添加到的一些服务器可能没有这样的备用内存

我试图使用NamedPipeWrapper()在winforms应用程序和windows服务之间进行通信,但服务器端(即服务)出现问题

众所周知,在编写服务时调试它们是非常困难的。它们必须通过服务系统注册和启动的方式。需要手动附加调试器。他们在那里工作的那部分


有些人已经习惯于在控制台应用程序中进行服务调试和开发。控制台没有使模拟服务环境变得困难的包,并且您有了一种输出调试消息的方法。当然,您也可以完全脱离服务,使用类似TaskScheduler的工具。它拥有所有的权力,还有一些,但没有任何问题。就连微软也将服务之外的东西转换成了服务。

对于这个软件包,windows服务似乎是作为代码的“服务器”端工作的,但将winforms应用程序作为服务器,将服务作为客户端工作。

我们通过httpsocket(web socket sharp)进行了通信并在服务的OnStart方法中启动httpserver,并在OnStop方法中停止它。构造函数只保存InitializeComponent()是的,我尝试过将其作为控制台应用程序和winform来重做,两者都可以正常工作。这似乎与服务的行为有关,但我无法准确指出,因为正如您所说,它们很难调试。@CarlOnFire防火墙和权限浮现在脑海中。通常这些问题是有限的,特别是在本地主机部分。也许他们中的一些人真的很有侵略性?