带有 Blazor Web 应用程序的 TCP 接收器服务

TCP Receiver Service with Blazor Web Applicaiton

我有一个 Blazor Web 应用程序,但需要一个接受 TCP 消息的后台服务。我之前创建了一个 Blazor 应用程序以及一个 TCP 发送方和接收方。但是还没有把它们放在一起。

一般问题

如何使用 Blazor Web 应用程序实现 TCP 接收器?

具体问题

如果您 运行 在自己的计算机上,那么是的,后台服务可以打开套接字并侦听 TCP 连接。如果您要发布到 Azure,这对于 TCP 服务来说似乎很有可能,那么您必须将侦听器从网站中分离出来。 Azure 网站只能侦听标准端口(80 和 443),这些端口由 Asp.Net.

使用

典型的 Asp.Net 入口点如下所示:

public class Program
{
    public static void Main(string[] args)
    {
        CreateHostBuilder(args).Build().Run();
    }

    public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
            .ConfigureWebHostDefaults(webBuilder =>
            {
                webBuilder.UseStartup<Startup>();
            });
}

调用 IHostBuilder.Run() 实例化每个已注册 IHostedService 的实例,启动它,等待用户尝试退出应用程序,然后在每个服务上调用停止。这是注入 TCP 侦听器的非常的好地方。

如果您确实需要在 Azure 中托管,则必须以不同方式托管侦听器。有几个选项:

  • Azure Service Fabric:Microsoft 推荐用于此类用例,但学习曲线相当高
  • Azure 云服务:更易于实施,但已弃用。每次部署都需要分配一个VM,所以发布、横向扩展等需要相当长的时间
  • Azure 容器实例:使用 DotNetCore,创建控制台应用程序、基于该应用程序创建容器映像并将映像托管在 Azure 中非常容易。不支持 green/blue 部署,您可以使用 Azure 流量管理器手动管理它。
  • Azure Kubernetes:我没用过这个,因为它的学习曲线也比较大,而且对于一个小项目我认为不值得。

您也可以在 AWS 中托管,但您必须 google 自己选择那里的托管选项,因为我没有这方面的经验。