UWP 应用程序中的进程 Web 服务器接收 JSON 消息

In process web server in UWP app to receive JSON messages

我有一个问题,我一直在关注这个post:

IoT core background webserver

构建我的后台网络服务器。然而,这个 post 连同我读到的大部分内容都只是一个无头的后台服务。就我而言,我确实有一个带有 UI 的主应用程序,用户可以查看并与之交互。所以,我不是无头的,我希望应用程序在设备启动时启动并显示 UI 。但是,我还希望 Web 服务器 运行 始终在后台(从应用程序内)监听 JSON 消息 posted。例如,如果我想通过向 device/app 发送 JSON 消息来更改 UI 上的文本。

我知道这通常称为进程内 Web 服务器。因此,我使用上面的大部分 link 来实现 Web 服务器 class,然后从后面的 MainPage.xaml.cs 代码中,我这样做是为了在另一个上实例化 Web 服务器 class监听消息的线程:

    private async void StartServer()
    {
        var webServer = new WebServer();

        await ThreadPool.RunAsync((workItem) =>
        {
            webServer.Start();
        });
    }

这是在后台线程中启动 Web 服务器的正确方法吗?当我阅读代码时(请放心,因为我仍在学习所有这些东西),似乎 Web 服务将在线程池中启动,但在收到一条消息后停止。这是正确的还是会无限期地继续 运行(或者只要该应用是 运行ning)?

谢谢!

是的,在headed UWP Application.In线程池的后台线程中启动web服务器是正确的方法,web服务在接收到消息后不会停止,因为WebServer的对象是未处理。

首先请参考Object Lifetime in .Net Framework.This topic也是关于一个对象的生命周期。 webServer 对象在应用程序退出前不会被释放。

其次,HTTP 1.1 实现了 persistent connections。在您提到的代码中,每个连接都将在 Web 服务器响应客户端(Web 浏览器)后关闭。因此将建立一个单独的 TCP 连接来获取此 Web 服务器中的每个请求。

var header = $"HTTP/1.1 200 OK\r\nContent-Length: {bodyStream.Length}\r\nConnection: close\r\n\r\n";