c# - 通过 .Net core 3.1 中的 Web 浏览器公开控制台应用程序信息
问题描述
我有一个重型控制台应用程序,它执行多个线程,这些线程在不同场景中读取、执行计算和写入输出。现在我正在尝试简单地创建一种方式,让每个人都能够使用 localhost 或 http/https 通过 Web 浏览器访问数据(实时或近实时)。
我试过关注这个资源以及这个其他的。我实际上环顾四周,发现了自托管,但我真的不知道如何以简单的方式实现它。
为简洁起见,我添加了一个非常简单的控制台应用程序示例:
using System;
using System.Collections.Concurrent;
using System.Threading;
namespace ConsoleApp1
{
class Program
{
public static int x = 0;
public static int y = 0;
public static int z = 0;
public static ConcurrentDictionary<String, int> ValuesDictionary = new ConcurrentDictionary<string, int>();
static void Main(string[] args)
{
//Function that updates the values in the dictionary
Thread createInputFileThread = new Thread(() => UpdateDictionaryThreadFunction(10000));
createInputFileThread.Start();
//How to start a simple web host here!
}
public static void UpdateDictionaryThreadFunction(int refreshTime)
{
while (true)
{
Thread.Sleep(refreshTime);
if (x < 100000 && y < 100000 && z < 100000)
{
ValuesDictionary.AddOrUpdate("ValueX", x, (key, oldValue) => oldValue + 1);
ValuesDictionary.AddOrUpdate("ValueY", y, (key, oldValue) => oldValue + 2);
ValuesDictionary.AddOrUpdate("ValueZ", z, (key, oldValue) => oldValue + 3);
}
else
{
ValuesDictionary.AddOrUpdate("ValueX", x, (key, oldValue) => 0);
ValuesDictionary.AddOrUpdate("ValueY", y, (key, oldValue) => 0);
ValuesDictionary.AddOrUpdate("ValueZ", z, (key, oldValue) => 0);
}
}
}
}
}
这里的目标是通过类似的东西访问 ValuesDictionary 中的数据,localhost:someport
并http://somename:someport
获得类似的东西:(这些值将每 x 秒刷新一次)
姓名 | 价值 |
---|---|
价值X | 34 |
价值Y | 42 |
价值Z | 42 |
解决方案
您使用.net core..您想要一个在某个端口上提供 TCP-IP 的控制台应用程序.. 我想说的最小解决方案是将 Kestrel 链接到您的控制台应用程序,分配请求接收器事件并在您的端口上启动它。 . 要反复刷新客户端,您可以使用带有计时器的客户端本地 JS。您的服务器可以为客户端的浏览器生成包含该 JS 部分的常用 HTML。
在控制台应用程序中使用 Kestrel 的示例:
注意:这是一个老式的“快速解决方案”。同样使用 Kestrel,最好先将您的应用程序构建为报告服务,独立于平台选择。然后,您可以在将来可能需要使用的任何平台(SignalR、Blazor、ASP、Azure 等)中“插入”该代码
推荐阅读
- python - 在列中填充值
- flutter - 使用 ViewModelProvider 时如何从 TextField 获取文本值?
- javascript - 在 Node.JS 中导入 HTML 文件并将变量传递给它
- spring-integration - Spring Integration:聚合器在超时时过期消息
- python - 如何使用 pip 1.4.1 信任主机
- sql-server - SQL Server 记录锁定的行为因记录数而异
- docker - .env 文件中可用的 Dockerfile ENV
- c++ - 为什么g ++显示未声明“gets()”,即使包括在内
- reactjs - React / TypeError:files.map 不是函数
- r - 如何使用 readWave() 消除 foreach 循环错误?