Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# UWP应用程序中用于接收JSON消息的进程内web服务器_C#_Multithreading_Windows 10 Universal_Windows 10 Iot Core - Fatal编程技术网

C# UWP应用程序中用于接收JSON消息的进程内web服务器

C# UWP应用程序中用于接收JSON消息的进程内web服务器,c#,multithreading,windows-10-universal,windows-10-iot-core,C#,Multithreading,Windows 10 Universal,Windows 10 Iot Core,我有一个问题,我一直在关注这个帖子: 来构建我的后台Web服务器。然而,这篇文章和我读到的大多数文章只是一个无头的后台服务。在我的例子中,我有一个主应用程序,它也有一个用户界面,用户可以查看和交互。所以,我不是无头的,我希望应用程序在设备启动时启动并显示UI。但是,我还希望有一个web服务器(从应用程序内部)始终在后台运行,以侦听要发布的JSON消息。例如,如果我想通过向设备/应用程序发送JSON消息来更改UI上的文本 我知道这通常被称为进程内web服务器。因此,我利用上面的大部分链接来实现w

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

来构建我的后台Web服务器。然而,这篇文章和我读到的大多数文章只是一个无头的后台服务。在我的例子中,我有一个主应用程序,它也有一个用户界面,用户可以查看和交互。所以,我不是无头的,我希望应用程序在设备启动时启动并显示UI。但是,我还希望有一个web服务器(从应用程序内部)始终在后台运行,以侦听要发布的JSON消息。例如,如果我想通过向设备/应用程序发送JSON消息来更改UI上的文本

我知道这通常被称为进程内web服务器。因此,我利用上面的大部分链接来实现web服务器类,然后从MainPage.xaml.cs代码中,我在另一个线程上实例化web服务器类以侦听消息:

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

        await ThreadPool.RunAsync((workItem) =>
        {
            webServer.Start();
        });
    }
这是在后台线程中启动web服务器的正确方法吗?当我阅读代码时(对我来说很简单,因为我仍在学习所有这些东西),似乎web服务将在线程池中启动,但在收到一条消息后停止。这是对的,还是它会无限期地继续运行(或者只要应用还在运行)


谢谢

是的,在UWP应用程序中的后台线程中启动web服务器是正确的方法。在线程池中,web服务在收到消息后不会停止,因为web服务器的对象未被释放

首先,请参考.Net框架中的内容。这也是关于对象的生命周期。在应用程序退出之前,webServer对象将不会被释放

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

var header=$“HTTP/1.1 200 OK\r\n内容长度:{bodyStream.Length}\r\n连接:close\r\n\r\n”


是的,在UWP应用程序中的后台线程中启动web服务器是正确的方法。在线程池中,web服务在收到消息后不会停止,因为web服务器的对象未被释放

首先,请参考.Net框架中的内容。这也是关于对象的生命周期。在应用程序退出之前,webServer对象将不会被释放

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

var header=$“HTTP/1.1 200 OK\r\n内容长度:{bodyStream.Length}\r\n连接:close\r\n\r\n”


谢谢你对我的问题的详细回答,我现在知道该怎么办了。关于您对持久连接的评论,还有一个后续问题,这可以吗?如果我只打算每隔一段时间(比如说一天一次)向web服务器发送一条JSON消息,那么在我收到消息后,TCP连接将关闭,因此没有连接打开,下次发送消息时,将打开一个新连接,这对我来说是有意义的。这可以吗?给定连接的行为是:close?在这个请求频率下(每天一次)也可以。但是您可以通过在web服务器上使用cmdlet(netstat-aton | findstr“8081”)来查看套接字状态。在您的web服务器中,如果客户端请求频率很高,将导致大量CLOSE_WAIT Socket()。所以你需要优化你的代码。谢谢你对我的问题的详细回答和回答,我现在知道该怎么做了。关于您对持久连接的评论,还有一个后续问题,这可以吗?如果我只打算每隔一段时间(比如说一天一次)向web服务器发送一条JSON消息,那么在我收到消息后,TCP连接将关闭,因此没有连接打开,下次发送消息时,将打开一个新连接,这对我来说是有意义的。这可以吗?给定连接的行为是:close?在这个请求频率下(每天一次)也可以。但是您可以通过在web服务器上使用cmdlet(netstat-aton | findstr“8081”)来查看套接字状态。在您的web服务器中,如果客户端请求频率很高,将导致大量CLOSE_WAIT Socket()。所以你需要优化你的代码。