Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.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# 具有Blazor Web应用程序的TCP接收器服务_C#_Asp.net Core_.net Core_Tcp_Blazor - Fatal编程技术网

C# 具有Blazor Web应用程序的TCP接收器服务

C# 具有Blazor Web应用程序的TCP接收器服务,c#,asp.net-core,.net-core,tcp,blazor,C#,Asp.net Core,.net Core,Tcp,Blazor,我有一个blazor web应用程序,但需要一个接受TCP消息的后台服务。我以前创建过Blazor应用程序以及TCP发送方和接收方。但我没有把它们放在一起 一般问题 如何使用Blazor Web应用程序实现TCP接收器 具体问题 我是否使用依赖注入将其注册为服务?据我所知,这些服务只在需要时调用,而不是一直处于活动状态 是否可能,或者我是否需要创建两个独立的应用程序 后台服务是否能够充当TCP接收器,就其持续监视的意义而言?我是否能够获取控制台应用程序代码并通过以下方式添加它: publi

我有一个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>();
          });
    
    公共静态IHostBuilder CreateHostBuilder(字符串[]args)=>
    Host.CreateDefaultBuilder(args)
    .ConfigureWebHostDefaults(webBuilder=>
    {
    webBuilder.UseStartup();
    })
    .ConfigureServices(服务=>
    {
    services.AddHostedService();
    });
    
  • API控制器端点可以充当TCP接收器,还是必须通过Rest请求调用它们

如果您在自己的计算机上运行,则是的,后台服务可以打开套接字并侦听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>();
            });
}
公共类程序
{
公共静态void Main(字符串[]args)
{
CreateHostBuilder(args.Build().Run();
}
公共静态IHostBuilder CreateHostBuilder(字符串[]args)=>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder=>
{
webBuilder.UseStartup();
});
}
调用
IHostBuilder.Run()
实例化每个注册的
IHostedService
的实例,启动它,等待用户尝试并退出应用程序,然后对每个服务调用stop。这是注入TCP侦听器的一个非常好的地方

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

  • Azure Service Fabric:由Microsoft推荐用于此类用例,但它具有相当高的学习曲线
  • Azure云服务:易于实现,但已弃用。每个部署都需要分配一个VM,因此发布、扩展等都需要相当长的时间
  • Azure容器实例:使用DotNetCore,创建控制台应用程序、基于该应用程序创建容器映像以及在Azure中托管映像非常容易。不支持绿色/蓝色部署,您可以使用Azure Traffic Manager手动管理
  • Azure Kubernetes:我没有用过这个,因为它有一个更大的学习曲线,对于一个小项目,我认为它不值得
你也可以在AWS中托管,但你必须自己用谷歌搜索那里的托管选项,因为我没有这方面的经验