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



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

一般问题

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

具体问题

  • 我是否使用依赖注入将其注册为服务?据我所知,这些服务只在需要时调用,而不是一直处于活动状态。

  • 这可能吗?或者我需要创建两个单独的应用程序吗?

  • 后台服务是否能够充当TCP接收器,因为它们一直在监控?我可以通过获取控制台应用程序代码并添加它吗

    public static IHostBuilder CreateHostBuilder(string[] args) =>
    Host.CreateDefaultBuilder(args)
    .ConfigureWebHostDefaults(webBuilder =>
    {
    webBuilder.UseStartup<Startup>();
    })
    .ConfigureServices(services =>
    {
    services.AddHostedService<TCPReceiver>();
    });
    
  • API控制器端点是否可以充当TCP接收器,或者必须通过Rest请求调用它们

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

典型的Asp。网络入口点如下:

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的一个实例,启动它,等待用户尝试退出应用程序,然后对每个服务调用stop。这是一个注入TCP侦听器的好地方。

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

  • Azure Service Fabric:Microsoft推荐用于此类用例,但它具有相当高的学习曲线
  • Azure云服务:更易于实现,但已弃用。每个部署都需要分配一个VM,因此发布、扩展等都需要相当长的时间
  • Azure容器实例:使用DotNetCore,可以很容易地创建控制台应用程序,基于该应用程序创建容器映像,并在Azure中托管映像。不支持绿色/蓝色部署,您可以使用Azure Traffic Manager手动管理
  • Azure Kubernetes:我没有使用过这个,因为它有一个更大的学习曲线,对于一个小项目来说,我认为这不值得

你也可以在AWS中托管,但你必须自己在那里搜索托管选项,因为我没有经验。

最新更新