我有一个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中托管,但你必须自己在那里搜索托管选项,因为我没有经验。