【发布时间】:2019-11-27 15:06:33
【问题描述】:
我正在尝试使用 NamedPipeWrapper (https://github.com/acdvorak/named-pipe-wrapper) 在 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;
}
}
github 文章上的示例代码显示了控制台应用程序保持关闭状态,但我担心它会停止服务的其余部分运行(我正在使用计时器来触发事件)。
这个系统会导致计时器停止运行吗?有没有什么方法可以让服务等待来自命名管道的消息而不使用这种方法?这种方法似乎使用了大量内存(~300mb),而我计划添加的一些服务器可能没有多余的内存。
【问题讨论】:
-
我们通过 httpsocket (web-socket-sharp github.com/sta/websocket-sharp) 进行通信,并在服务的 OnStart-Method 中启动 httpserver 并在 OnStop-Method 中停止它。构造函数只持有 InitializeComponent()
标签: c# service pipe named-pipes