NetCore shell命令下面动态指定监听端口的几种方式

Netcore 就是为了容器化而生的一个开源框架,在使用过程中除开传统的通过 IIS 挂载非托管方式来跑 Netcore 的项目。

我们后面就会运用容器化来进行项目的部署操作,在这个过程中我们是如何基于配置文件或者命令来配置我们的应用监听端口的呢?同时该如何进行 SSL 证书的绑定呢?

配置文件的处理方式

通过编写对应的 json 配置文件如下:

    hostsettings.json(名字随便取)    {        "server.urls":"http://*:5000;http://*:5001"    }

配置完成后可以执行脚本命令:

对应的应用程序入口需要增加 json 文件的引用,具体的代码如下

    ///     /// 程序启动    /// 程序命令行指定使用什么的配置文件进行打开:    /// 命令:dotnet run --launch-profile Test --project projectName      /// 命令:dotnet 程序组件.DLL  --environment 环境   使用什么环境进行打开程序 --server.urls "绑定端口 1;绑定端口 2"    /// 该命令 windows 和 Linux 均可以。    ///     public static class Program    {        ///         /// 程序主入口        ///         ///         public static void Main(string[] args)        {            CreateWebHostBuilder(args).Build().Run();        }        ///         ///  构建 web 主机        ///         ///         ///         public static IWebHostBuilder CreateWebHostBuilder(string[] args)        {            //添加配置文件            var config = new ConfigurationBuilder()                .SetBasePath(Path.GetDirectoryName(typeof(Program).Assembly.Location))                .AddJsonFile("hostsettings.json", optional: true)//命令行启动的时候会从该配置文件进行获取,使用 ide 工具启动会根据 launchSettings 里面设置好的主机配置信息进行使用                .AddCommandLine(args)                .Build();            return WebHost.CreateDefaultBuilder(args)                  .UseConfiguration(config)                  .UseContentRoot(Path.GetDirectoryName(typeof(Program).Assembly.Location))                  .UseKestrel(options =>                  {                      options.AddServerHeader = false;                      //是否允许请求同步操作                      options.AllowSynchronousIO = true;                      options.ApplicationSchedulingMode = SchedulingMode.ThreadPool;                  })                  //.UseUrls($"http://*:{port}",)                  .UseStartup();        }    }

通过直接在命令行下面进行配置处理:

dotnet application.dll --environment 环境 --server.url "绑定地址"

运用配置的优先级顺序 : 命令行 > 配置文件

项目的 nuget 引用,具体的程序集会抽空在后面一一为大家讲解.

项目:csproj 文件                                                                              

配置 ssl 的证书处理

首先我们需要一个 pfx 的个人证书.同时将证书丢到应用程序的运行文件夹中。

hostsettings.json(名字随便取) {  "server.urls": "http://*:5000;http://*:5001",  "pfxfile": "*.domain.com",  "sslpwd": "pfx 证书的密码"}

配置完成后我们通过在应用程序的启动中将证书进行加载

///     /// 程序启动    /// 程序命令行指定使用什么的配置文件进行打开:    /// 命令:dotnet run --launch-profile Test --project projectName      /// 命令:dotnet 程序组件.DLL  --environment 环境   使用什么环境进行打开程序 --server.urls "绑定端口 1;绑定端口 2"    /// 该命令 windows 和 Linux 均可以。    ///     public static class Program    {        ///         /// 程序主入口        ///         ///         public static void Main(string[] args)        {            CreateWebHostBuilder(args).Build().Run();        }        ///         ///  构建 web 主机        ///         ///         ///         public static IWebHostBuilder CreateWebHostBuilder(string[] args)        {            var approotpath = Path.GetDirectoryName(typeof(Program).Assembly.Location);            //添加配置文件            var config = new ConfigurationBuilder()                .SetBasePath(approotpath)                .AddJsonFile("hostsettings.json", optional: true)//命令行启动的时候会从该配置文件进行获取,使用 ide 工具启动会根据 launchSettings 里面设置好的主机配置信息进行使用                .AddCommandLine(args)                .Build();            return WebHost.CreateDefaultBuilder(args)                  .UseConfiguration(config)                  .UseContentRoot(approotpath)                  .UseKestrel(options =>                  {                      options.AddServerHeader = false;                      //是否允许请求同步操作                      options.AllowSynchronousIO = true;                      options.ApplicationSchedulingMode = SchedulingMode.ThreadPool;                      //配置 https,将 pfx 证书丢到 bin 目录下面,同时针对配置文件进行密码处理                      options.ConfigureHttpsDefaults(s =>                      {                          var pfxPwd = config.GetSection("sslpwd").Value;                          var pfxFile = Path.Combine(approotpath, config.GetSection("pfxfile").Value);                          if (File.Exists(pfxFile))                          {                              s.ServerCertificate = new X509Certificate2(pfxFile, pfxPwd);                              s.SslProtocols =                              SslProtocols.Tls |                              SslProtocols.Tls11 |                              SslProtocols.Tls12;                          }                      });                  })                  //.UseUrls($"http://*:{port}",)                  .UseStartup();        }    }

配置完成后可以进行命令行启动绑定了

dotnet application.dll --environment 环境 --server.url "https://www.domain.com"

有说的不明白的地方环境私信我,很乐意为大家解答.


本文首发于 GitChat,未经授权不得转载,转载需与 GitChat 联系。

阅读全文: http://gitbook.cn/gitchat/activity/5d687e9c1e6dd75f4f42ff00

您还可以下载 CSDN 旗下精品原创内容社区 GitChat App ,阅读更多 GitChat 专享技术内容哦。

FtooAtPSkEJwnW-9xkCLqSTRpBKX

你可能感兴趣的:(NetCore shell命令下面动态指定监听端口的几种方式)